• ベストアンサー

(超初歩)配列関数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(); ?>

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • asahina02
  • ベストアンサー率47% (95/202)
回答No.3

#2です。 この補足のコードを見る限り・・$dataX[] の意味が理解できていないと思われます。 $dataX[] はこの状態で既に配列になっているので、  $datax = array($dataX[]); のように再度設定される必要はないです。 と書きつつも、私の回答もちょっとおかしかったようで誤解を招いてしまったようです。スイマセン 結局、今現在エラーになっている行は書く必要がありません。

litton101
質問者

お礼

全ての意味がつかめました(^^; 何度もすみませんでした。 素人考えで、どうしても $datax = array(1,2,3...); 【こういう行がなければいけないのだ】と固定概念に縛られていました。 そうですよね、そうですよね お恥ずかしい限りです。 無事、DBから取り出した値をプロットできましたm(_ _)m

その他の回答 (2)

  • asahina02
  • ベストアンサー率47% (95/202)
回答No.2

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

litton101
質問者

補足

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)
回答No.1

$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"]; }

litton101
質問者

補足

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~?>の間))も ご教示いただけると大変幸いなのですが。。。 いつも恐縮です。

関連するQ&A

  • forで書き出した値を条件付で合計したい

    PHPファイルで、以下のような成績表が出力されます。 ------------ 国語  算数 ------------ 89   NULL 90   78 NULL  45 60   99   :略 ------------- 150  177 ←こういう風に合計行を付けたしたいのですが、 事情があり、国語も算数も受験した者だけを合計したいのです。 for文とかmysql_fetch_arraytとか、使ってる関係で、 どういうにすればよいのかさっぱり見当つきません。 記述につき、アドバイスいただけますと幸いです。 <?php $con = mysql_connect(SERV, USR, PASS); $selectdb = mysql_select_db(MYDV, $con); $sql = "SELECT KOKUGO,SANSU FROM MYTABLE"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body .= "<table border='1'>\n"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body .= "<tr>\n"; $body .= "<td>" . $col["KOKUGO"] . "</td>\n"; $body .= "<td>" . $col["SANSU"] . "</td>\n"; $body .= "</tr>\n"; } $body .= "</table><br>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> <html><body> <?= $body ?> </body></html> ■ 環境 PHP 5.0.4 Win MySQL mysql 4.0.14b Win ■知識レベル: HTMLタグ打ち、初歩的なSQLを理解できる程度、PHP他プログラミング知識ほとんどなし

    • ベストアンサー
    • PHP
  • 入門書のPHPサンプル内で、MySQL関数を使いたい

    環境:PHP5.0.3+MySQL4.0.14です。PHPどころか、プログラムも素人です。 検索結果をHTML表に一覧化する仕組みを作っているのですが WHERE条件に合致した数値データを平均化したり、 WHERE条件合致した日付データの書式を【MySQL関数によって】加工したいです。 それぞれ、mysql.exe(DOS窓上)での書き方はわかったものの (SELECT AVG(HOGE1) WHERE (HOGE <= 1) のように)、 これをPHPに組み込んだ際ににどう使えばわからないです。 今回使っているPHP入門書のサンプルは以下の通りです。ここで mysql_fetch_arrayに格納されたテーブル(カラム)を取り出しているらしい ことはわかりますが、以下のサンプルで加工したい対象である $col["DATE1"]、$col["HOGE1"]を $col["date_format(DATE1, '%y/%m/%d')"] や $col["AVG(HOGE1)"]などと してもだめみたいです。 以下の例で、これらを取り出すにはどのように記述したらいいでしょうか。 よろしくお願い致します。 <?php require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from mytable"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body = "結果: $recmax 件"; $body .= "<table>"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body .= "<td>" . $col["DATE1"] . "</td>"; $body .= "<td>" . $col["HOGE1"] . "</td>"; $body .= "</tr>"; } $body .= "</table>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> <html> <head></head> <body> <?= $body ?> </body> </html>

    • ベストアンサー
    • PHP
  • SQL1回で、平均と合計を両方出す方法はありますか?

    1回のSQL文発行で、同じフィールドに対し平均(AVG)と合計(SUM)を 両方算出することはできませんよね? 以下のようにすると、「第一列」が空白で出力されてしまいます。 $sql = "SELECT AVG(MYDATA) AS AVG_MYDATA, SUM(MYDATA) AS SUM_MYDATA FROM MYTABLE"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body = "<table border='1'>"; $body .= "<tr>"; $body .= "<td>" . $col["AVG_NYDATA"] . "</td>"; //第一列 $body .= "<td>" . $col["AVG_NYDATA"] . "</td>"; //第二列 $body .= "</tr>"; $body = "</table>"; 環境:MySQL 4.0.25

    • ベストアンサー
    • MySQL
  • 検索結果の表示をもっと早くしたい

    次のように、200人の「MYID」諸氏に対応する登録年月(6桁)を リストアップしたところ、SQLを人数分解釈するためか、 表示までに異常に時間がかかってしまうのですが、 改善案をご教示いただけますと幸いです。 リストアップのイメージ (1001氏) 200409 200410 200411 (1002氏) 200501 200402   :(略) <?php $con = mysql_connect(SERV, USR, PASS); $selectdb = mysql_select_db(MYDV, $con); $numfrom = "1001"; $numto = "1200"; for ($i = $numfrom ; $i <= $numto; $i++) { $sql = "SELECT * FROM MYTABLE"; $sql .= "WHERE MYID = " . $i; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body .= "<table border='1'>\n"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body .= "<tr>\n"; $body .= "<td>" . $col["YYMM"] . "</td>\n"; $body .= "</tr>\n"; } $body .= "</table><br>\n"; } mysql_free_result($rst); $con = mysql_close($con); ?> <html><body> <?= $body ?> </body></html>

    • ベストアンサー
    • PHP
  • MYSQLからのarrayデータをjpgraphに表示

    いつもお世話になっています。 MYSQLからデータをarrayで受け取りjpgraphに表示したいのですが SQL、PHP、jpgraphの設定は大丈夫で、 以下抜粋 <?php require_once 'jpgraph.php'; require_once 'jpgraph_bar.php'; $xdata = array('Jan','Feb','Mar','Apr','May'); $graph = new Graph(200,150,'auto'); $graph->SetScale('textlin'); $graph->xaxis->SetTickLabels($xdata); $ydata1 = array(13,9,17,8,13);←ここの部分で の配列を手入力だと問題ないのですが、 <?php mysql_connect('localhost','root','xxxx'); mysql_select_db('xxxxx'); $sql = "SELECT * FROM kaiin WHERE shimei LIKE '%あ%'"; $result = mysql_query($sql); $sp_arr = array(); while($row = mysql_fetch_array($result)){ $sp_arr[] = $row["renban"]; } このSQLからのデータ配列を折れ線グラフにしなくてはならないのですがどうにも動かず、arrayをSESSONでやりとりする予定でいますが、print_rでも中身は見えませんので見当もつかず困っています。 別ページでも扱えるようにセッション変数でのやりとりも含めて 教えていただきたいのですが、どなたかご教授いただけないでしょうか?

    • ベストアンサー
    • PHP
  • PHP+MySQLから結果セット取得後の計算方法

    PHP+MySQLから結果セット取得後の計算方法を教えてください。 イメージは以下になります。 以下、testtable とします。 生徒|国語|算数|理科|社会 A 60 80 90 60 B 80 60 70 65 C 95 30 50 90 D 100 95 85 90 そこで、国語が80点以下の生徒を検索し、抽出した生徒の算数平均点数を導きたいのです。 //国語が80点以下の生徒を抽出 $sql="SELECT * from testtable WHERE 国語<=80"; $rst= mysql_query($sql); 上記で国語が80点以下の生徒を検索出来たと思うのです。 イメージは下記になります。 生徒|国語|算数|理科|社会 A 60 80 90 60 B 80 60 70 65 算数の平均を求めるので、(80+60)/2の式を書きたいのです。 平均の2は、mysql_num_rows($rst)で導き出せるのですが、 (80+60)の部分がわかりません。 while ($col = mysql_fetch_array($rst)){ $sum=$sum+$col[算数];} $body.= "平均".$sum/mysql_num_rows($rst)."点"; でよいでしょうか。 ご教授願います。

    • ベストアンサー
    • MySQL
  • mysql_num_rowsなどのWarningの原因がわからない

    以下のプログラム、何が誤っているのでしょうか。 違う箇所で使ったPHPの使いまわし(そちらは問題なく動いている) なのですが、サーバー上で実行しても Warning: mysql_num_rows(): supplied argument is not a valid MySQL result ... Warning: mysql_free_result(): (以下同上) となり、どうしても原因が究明できません。。 以下、省略してますが、本質は変わりません。SQL文($sql)を phpMyAdminで通すとなんら問題なく問い合わせ結果が得られます。 <?php  $con = mysql_connect(localhost, username, pss);  $selectdb = mysql_select_db(mydb, $con);  $sql = "SELECT Kaisya FROM MYTABLE";  $rst = mysql_query($sql, $con);  $recmax = mysql_num_rows($rst);//■←この行がWarning■  $body = "<table border='1'>";  $body .= "<tr>";  $body .= "<td style=\"text-align: center;\">会社名</td>";  for ($recnum = 0; $recnum < $recmax; $recnum++) {   $col = mysql_fetch_array($rst);   $body .= "<tr>";   $body .= "<td>" . $col['Kaisya'] . "</td>";   $body .= "</tr>";  }  $body .= "</table>";  mysql_free_result($rst);//■←この行がWarning■  $con = mysql_close($con); ?> <html><head></head><body> <?= $body ?> </body></html>

    • ベストアンサー
    • PHP
  • リストから詳細画面に遷移するためのリンク作成と詳細画面の表示

    PHP5とMySQL4.0の組み合わせで、初歩的なことがわかりません。 例えば、(1)社員IDと、(2)年齢、(3)名前をリストアップする画面があるとして、 IDのところをハイパーリンクにして、それを押すとその社員の レコード内容を更新する画面を出す、みたいなことをしたいのですが、 これって method="POST" でなく、GETでやるのですよね? 「IDのリンク」とは、<a href="syain_detail.php?id=100">みたいなカタチに なるのでしょうが、具体的なスクリプトでご教示いただけないでしょうか。 単純に(IDへのリンクを考えずに)DBのレコードをPOSTでざーっと リストアップするHTMLまではできるのですが、 IDをハイパーリンクにして次の画面を構成するPHPがさっぱり わからないのです。下記、DBのサンプルと、わたしにわかるスクリプトです。 --------syainmaster---------- id   age  name ---------------------- 100   20   suzuki 200   24   sato 300   30   tanaka ----------------------- <?php   $con = mysql_connect(localhost, root, mypass);   $selectdb = mysql_select_db(mydb, $con);   $sql = "select * from syainmaster";   $rst = mysql_query($sql, $con);   $recmax = mysql_num_rows($rst);   $body = "<TABLE>";   for ($recnum = 0; $recnum < $recmax; $recnum++) {     $col = mysql_fetch_array($rst);     $body .= "<TR>";     $body .= "<TD>" . $col["id"] . "</TD>";     $body .= "<TD>" . $col["age"] . "</TD>";     $body .= "<TD>" . $col["name"] . "</TD>";     $body .= "</TR>";   }   $body .= "</TABLE>";   $con = mysql_close($con); ?> <HTML> <BODY> <?= $body ?> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • functionの中で条件分岐が効かない

    JpGraphで、HTML検索フォームからPOSTされてきた変数 $numの値に応じて 縦軸の小数点以下の位数を調整したいのですがうまくいきません。 (テスト1) 下記サンプルをそのまま実行 (テスト2) num=0にする(5行目→コメントに;4行目コメント→外す) (テスト3) 4、5行目の両方をコメントにする →結果全て同じで、縦軸は少数点第3位(0.000~8.000)まで表示されます。 (テスト4) 4行目~15行目および22行目をコメントにする。 →縦軸は、少数点第1位まで表示されます(0.0~8.0)。 JpGraphに関係なく、何か基本的なことでつまづいている気がいたしますが。 <?php /*01*/ include ("./JpGraph/jpgraph.php"); /*02*/ include ("./JpGraph/jpgraph_scatter.php"); /*03*/  /*04*/ //$num = 0; /*05*/ $num = 1; /*06*/  /*07*/ function yLabelFormat($aLabel) { /*08*/   if ($num == 0){ /*09*/     return number_format($aLabel,3); /*10*/   } elseif ($num == 1){ /*11*/     return number_format($aLabel,2); /*12*/   } else { /*13*/     return number_format($aLabel,1); /*14*/   } /*15*/ } /*16*/  /*17*/ $datax = array(3.58,8.61,9.32,4.29,8.57,6.27,6.72); /*18*/ $datay = array(2.78,5.68,6.12,0.63,7.27,4.43,3.83); /*19*/ $graph = new Graph(500,500,"auto"); /*20*/ $graph->SetScale("linlin"); /*21*/ $sp1 = new ScatterPlot($datay,$datax); /*22*/ $graph->yaxis->SetLabelFormatCallback('yLabelFormat'); /*23*/ $graph->Add($sp1); /*24*/ $graph->Stroke(); ?>

    • ベストアンサー
    • PHP
  • MysqlデータをJpgraphで表示できません

    Mysqlからデータを取り出してphpにてjpgraph画像を作りたい思っているのですが、 どうもできません。 phpコードはこちらになります。-------------------- <?php // データベースに接続 if(!$con=mysql_connect("127.0.0.1","root","xxxxx")){ echo"接続失敗"; exit; } // データベースを選択 if(!mysql_select_db("stock",$con)){ echo"database select error"; exit; } // SELECT文を実行 $sql="SELECT * FROM `tstock`" ; if(!$res=mysql_query($sql)){ echo "SQL error cannot connect mysql table<BR>"; exit; } // 全人数を格納 $all_num=0; while($row=mysql_fetch_array($res)){ $all_num+=$row["KO"]; } // データ取得位置を先頭に戻す if (!mysql_data_seek ($res, 0)){ echo "データ取得位置の移動失敗<BR>"; exit; } //折れ線グラフの表示 ------------------------- require_once("jpGraph/jpgraph.php"); require_once("jpGraph/jpgraph_line.php"); require_once("jpGraph/jpgraph_canvas.php"); // データ $xdata = array(); while($row=mysql_fetch_array($res)){ $ydata = array($row['KO']); } //グラフ作成 $graph = new Graph(600,500,"auto"); $graph->img->SetImgFormat("png"); $graph->SetScale("textlin"); $graph->title->Set("Line Plot Example"); $graph->xaxis->SetTickLabels($xdata); $graph->xaxis->title->Set("Month"); $graph->yaxis->title->Set("y-title"); $lp1 = new LinePlot($ydata); $lp1->SetLegend("Temperature"); $graph->Add($lp1); $graph->Stroke(); // 結果セットの解放 mysql_free_result($res); // データベースから切断 mysql_close($con); ?> --------------------------------------------------- グラフ用データを手入力 $ydata1 = array(83,19,20,40,50); とするとグラフが描けるのですが、 以下からMYSQLデータを引っ張るとエラーがでてグラフを 作ることができません。 $xdata = array(); while($row=mysql_fetch_array($res)){ $ydata = array($row['KO']); } ------------------------------------------------------- mysql接続確認は別のファイルにて試したところ ちゃんとHTML上で接続と、mysqlのデータを表示 することができます。 どうすれば折れ線グラフを描くことができるのでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう