アプリ版:「スタンプのみでお礼する」機能のリリースについて

Sansu(算数)、Kokugo(国語)に、それぞれ、90、80…略、87、96、76…略
のようにテストの点が登録されてて、これを次のような形で取り出すとします。

$sql .= "SELECT * FROM MYTABLE";
$rst = mysql_query($sql, $con);
$recmax = mysql_num_rows($rst);
for ($recnum = 0; $recnum < $recmax; $recnum++) {
  $col = mysql_fetch_array($rst);
  echo $col["Sansu"];
  echo $col["Kokugo"];
}

この、算数と国語を、次のような形にするには、どう書けばいいでしょうか?

$Sansu_X = array(90, 80・・・略);
$Kokugo_Y = array(87、96、76…略);


要は、JpGraphで、算数=X軸と国語=Y軸とすつ散布図を描かせたいのですが、
mysql_fetch_arrayで取り出した値を、下記の
「$datax = array(3.5・・・」、「$datay = array(20,22,・・・」のように
したいのです。

<?php
include ("../jpgraph.php");
include ("../jpgraph_scatter.php");

$datax = array(3.5,3.7,3,4,6.2,6,3.5,8,14,8,11.1,13.7);
$datay = array(20,22,12,13,17,20,16,19,30,31,40,43);

$graph = new Graph(300,200,"auto");
$graph->SetScale("linlin");

$graph->img->SetMargin(40,40,40,40);
$graph->SetShadow();

$graph->title->Set("A simple scatter plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$sp1 = new ScatterPlot($datay,$datax);

$graph->Add($sp1);
$graph->Stroke();
?>

A 回答 (3件)

#2です。


この補足のコードを見る限り・・$dataX[] の意味が理解できていないと思われます。
$dataX[] はこの状態で既に配列になっているので、
 $datax = array($dataX[]);
のように再度設定される必要はないです。

と書きつつも、私の回答もちょっとおかしかったようで誤解を招いてしまったようです。スイマセン

結局、今現在エラーになっている行は書く必要がありません。
    • good
    • 0
この回答へのお礼

全ての意味がつかめました(^^; 何度もすみませんでした。

素人考えで、どうしても
$datax = array(1,2,3...);
【こういう行がなければいけないのだ】と固定概念に縛られていました。

そうですよね、そうですよね
お恥ずかしい限りです。

無事、DBから取り出した値をプロットできましたm(_ _)m

お礼日時:2005/11/21 15:39

  $Sansu_X[] = $col["Sansu"];     //←■この行を追加


  $Kokugo_Y[] = $col["Kokugo"];     //←■この行も追加
この行をそれぞれ
  $dataX[] = $col["Sansu"];
  $dataY[] = $col["Kokugo"];
として、下の方のコメントは元に戻す。
これでいいかと思いますよ。

この回答への補足

asahina02さん、貴重なレスありがとうございます。
ご教示の内容を文末のように理解しましたが、試してみると

Fatal error: Cannot use [] for reading in /usr/local/apache/htdocs/scat.php on line 「//■エラー」の行

のように、エラーになります。むむむ・・
何か些細なミスを犯しているのでしょうか・・・


for ($recnum = 0; $recnum < $recmax; $recnum++) {
  $col = mysql_fetch_array($rst);
  echo $col["Sansu"];
  echo $col["Kokugo"];
  $dataX[] = $col["Sansu"];  //■
  $dataY[] = $col["Kokugo"];  //■
}



include ("../jpgraph.php");
include ("../jpgraph_scatter.php");

$datax = array($dataX[]); //■エラー
$datay = array($dataY[]); //■

$graph = new Graph(300,200,"auto");
$graph->SetScale("linlin");

$graph->img->SetMargin(40,40,40,40);
$graph->SetShadow();

$graph->title->Set("A simple scatter plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$sp1 = new ScatterPlot($datay,$datax);


$graph->Add($sp1);
$graph->Stroke();
?>

補足日時:2005/11/21 14:45
    • good
    • 0

$x=array(100,90,80,70);


というのは
$x[]=100;
$x[]=90;
$x[]=80;
$x[]=70;
と同等です。
whileで流し込むだけでよいでしょう。
こんな感じです。

while($Row = mysql_fetch_array($rst,MYSQL_ASSOC)){
$Sansu_X[]=$Row["Sansu"];
$Kokugo_Y[]=$Row["Kokugo"];
}

この回答への補足

yamabejpさん、いつもお世話になっております。

ご教示のwhile文とは、元質問のfor文内を次のようにするのと同等ですよね?

for ($recnum = 0; $recnum < $recmax; $recnum++) {
  $col = mysql_fetch_array($rst);
  echo $col["Sansu"];
  echo $col["Kokugo"];
  $Sansu_X[] = $col["Sansu"];     //←■この行を追加
  $Kokugo_Y[] = $col["Kokugo"];     //←■この行も追加
}

それで、質問の前後に、こちらでもいろいろ試してみたのですが

<?php
include ("../jpgraph.php");
include ("../jpgraph_scatter.php");

//$datax = array(3.5,3.7,3,4,6.2,6,3.5,8,14,8,11.1,13.7);  //■←これをコメントにして
$datax = array($Sansu_X[]);         //■←こうしてみましたが、エラー、それと、
$datay = array(20,22,12,13,17,20,16,19,30,31,40,43);

$graph = new Graph(300,200,"auto");
$graph->SetScale("linlin");

$graph->img->SetMargin(40,40,40,40);
$graph->SetShadow();

$graph->title->Set("A simple scatter plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

//$sp1 = new ScatterPlot($datay,$datax);  //■←これをコメントにして
$sp1 = new ScatterPlot($datay[],$datax[]);  //■こんなふうにしてもエラーなのですが。

$graph->Add($sp1);
$graph->Stroke();
?>

その後(JpGraphで描画するスクリプトの方(=<?php~?>の間))も
ご教示いただけると大変幸いなのですが。。。

いつも恐縮です。

補足日時:2005/11/21 12:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!