- ベストアンサー
(超初歩)配列関数arrayの書き方について…
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(); ?>
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 この補足のコードを見る限り・・$dataX[] の意味が理解できていないと思われます。 $dataX[] はこの状態で既に配列になっているので、 $datax = array($dataX[]); のように再度設定される必要はないです。 と書きつつも、私の回答もちょっとおかしかったようで誤解を招いてしまったようです。スイマセン 結局、今現在エラーになっている行は書く必要がありません。
その他の回答 (2)
- asahina02
- ベストアンサー率47% (95/202)
$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(); ?>
- yambejp
- ベストアンサー率51% (3827/7415)
$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~?>の間))も ご教示いただけると大変幸いなのですが。。。 いつも恐縮です。
お礼
全ての意味がつかめました(^^; 何度もすみませんでした。 素人考えで、どうしても $datax = array(1,2,3...); 【こういう行がなければいけないのだ】と固定概念に縛られていました。 そうですよね、そうですよね お恥ずかしい限りです。 無事、DBから取り出した値をプロットできましたm(_ _)m