• 締切済み

動的配列の利用方法について

いつも御指導頂きありがとうございます。 度々ですが、質問させて頂きます。 Mysqlで、クエリを実行して次の文でデータを抜き出すのですが、 while ($row = mysql_fetch_assoc($res)) { ?> <a href= "1test.php?pref_id=<? echo $row['pref_id'] ?>"><? echo $row['pref_name'] ?></a><br> $pref_id=$row['pref_id']; <? } $pref_id //←ここが? ?> としてループで、データを下記のように表示しています。 28兵庫 27大阪 26京都 25滋賀 ループ{}から外れて変数に格納されている値を使おうとすると 当然ですが、一番最後の値の25滋賀が表示されて しまいます。 このデータの結果を利用したいのですが、 データの個数が変化する動的配列というのでしょうか? 配列に入れて、何番目の値という形で 違う場面でデータを利用したのですが方法がわかりません。 26京都を選びたいのですが、どうしたら京都が反映されるのか御指導お願いします。 表現がうまく伝わるといいのですが、いかがでしょうか? 御指導お願いします。

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

みんなの回答

  • unchikun
  • ベストアンサー率22% (2/9)
回答No.1

ループの時点で配列に順に詰めていって、あとから参照するというのはどうでしょうか。 $rows = array(); while ($row = mysql_fetch_assoc($res)) {  /* 表示部 (略)*/  $rows[] = $row;//順次配列に詰める } echo $rows[2]['pref_id'];//京都のpref_id echo $rows[1]['pref_name'];// 大阪のpref_name 何番目ではなくて、pref_idで参照したいなら、  $rows[] = $row;//順次配列に詰める の部分を  $rows[ $row['pref_id'] ] = $row; とすればよいと思います。 意味を取り違ってなければよいですが・・・。 見当違いの回答であればごめんなさい。

nicolemen
質問者

お礼

早々にありがとうございます。 そうです。 このような感じを求めていました。 助かりました。

関連するQ&A

  • 配列としてMysqlから値を取得する方法を教えて下さい。

    いつも助けていただきましてありがとうございます。 チェックボックスの値をMysqlに登録するところまではできましたが、 今度それを、確認・更新画面に読み込む方法でつまずいています。 どうぞご指導をお願い致します。 Mysqlから「days_id」の値が「0,2,5」と取得されても 実際のチェックが付くのが、「5」のみなってしまいます。 配列としてMysqlから値を取得する方法を教えて下さい。 $res = mysql_query($sql); $i=0; foreach($labels as $label){ while ($row = mysql_fetch_array($res)) { $days_id = $row["days_id"]; } if($i==$days_id){ $checked = " checked"; echo "<label>\n<input type=\"checkbox\" name=\"job_type[]\" value=\"{$i}\" {$checked} />{$label}</label>"; }else{ $checked = ""; echo "<label>\n<input type=\"checkbox\" name=\"job_type[]\" value=\"{$i}\" {$checked} />{$label}</label>"; } $i++; }

    • ベストアンサー
    • PHP
  • 配列の要素でmysqlに問い合わせ

    フォームから送信されたデータを配列として取得し、その配列の1つの要素に対してそれぞれmysqlにselectで問い合わせてageというカラムの値を取得したいと思っています。 配列の要素の数がその都度変わるので、要素が5つある場合には5回selectでデータベースに問い合わせてデータを5つ取得したいのですが、それは可能でしょうか? ためしに下記のようにしてみたのですが、うまく取得できませんでした。 $hairetu = $_POST; for($i=0; $i< count($hairetu) ; $i++){ $sql = "SELECT * FROM member where age = '$hairetu[i]';"; $res = mysql_query($sql, $conn) or die("エラー"); $row = mysql_fetch_array($res, MYSQL_ASSOC); $age = $row["age"]; echo $age; } $ageの値をcount($hairetu)の回数分表示したいのですが、どのように処理していいのか分かりません。 また、根本的におかしな点もあると思いますがよろしくお願いします。

    • ベストアンサー
    • MySQL
  • smartyでMySQLから連想配列取り出しと表示

    フォーム(POST)を使ってMySQLにデータを挿入し、 mysql_fetch_assocにて連想配列で取り出して、 whileで表示する場合、 ======================================== $sql = "SELECT * hogehoge"; $result = mysql_query($sql); while ($row = mysql_fetch_assoc($result)) { echo $row["userid"]; echo $row["name"]; echo $row["sex"]; } ======================================== とすれば、MySQLから値を取りだして表示できます。 ただ、それをsmartyに置き換えて以下のようにすると、 ======================================== {foreach from=$row item=hoge} <tr> <td>{$row.userid}</td> <td>{$row.name}</td> <td>{$row.sex}</td> </tr> {/foreach} ======================================== 同じ値が$rowの値の数だけ返されてしまいます。 例だと、 1 太郎 男 2 花子 女 3 一郎 男 4 陽子 女 5 良子 女 と表示したいものが、 1 太郎 男 1 太郎 男 1 太郎 男 となってしまいます。 これを解決するには、どのようにすればよろしいのでしょうか?

    • ベストアンサー
    • PHP
  • 入れ子のようにしてデータを作りたい。

    よろしくお願い致します。 次のようなコードを書きました。 京都(15) 大阪(18) 滋賀(6) 奈良(23) 和歌山(21) 兵庫(9) というようなファイルを作りたいのですが、 どうもカッコの中に入れる数字がうまく入りません。 また一般的な方法として下記のような発想の 記述でよいのか、御指導をお願い致します。 <table width="100%" align="left"> <?php $con = MYSQL_CONNECT("localhost","*****","*****"); mysql_select_db("net-jp00001"); $res = mysql_query("SELECT pref.pref_id, pref.pref_name FROM pref"); // 表示文字コード if (!$res) { die('クエリーが失敗しました。'.mysql_error()); } $i=0; // クエリの文字の表示 while ($row = mysql_fetch_assoc($res)) { if ( $i >= 3 ){ ?> <form method='POST' action='search_city.php'> <tr align="center" bgcolor="#FCFFD0"> <? $i=1; }else{ $i++; } ?> <td width="5" height="21" colspan="1" align="left" bordercolor="1" bgcolor="#FCFFD0"> <input type="radio" name="pref_id" value="<?php echo $row['pref_id'] ?>"> </td> <td width="200"colspan="11" align="left" bordercolor="1" bgcolor="#FCFFD0"> <label><font size="-1"><?php echo $row['pref_name'] ?></font></label> <?  //この部分でエラーが出て記述方法がわかりません。 $pref = $row['pref_name']; $res1 = mysql_query("SELECT count(*) as city_id FROM pref INNER JOIN city ON pref.pref_id = city.pref_id WHERE pref.pref_name = $pref_name"); list($num) = mysql_fetch_row($res1); echo "(".$num.")"; ?> </td> <? } ?> </tr> <tr align="left" bgcolor="#D0FFF8"> <td height="21" colspan="12" bordercolor="1"> <input name="submit" type='submit' value='市区エリアへ'> </td> </tr> </form> </table>

    • ベストアンサー
    • PHP
  • ラジオボタンで表示された内容を整列させたい

    PHPとMYSQL初心者です。どうも難しくて暗礁に乗り上げております。 どなたか助けて下さい。 次のコードは、フォームを使って「エリア」を指定して、 指定された都道府県を表示するようにしたいのですが、 表示はできるのですが、それを3列に整列して表示をさせることが できません。 茨城 群馬 千葉 埼玉 東京 神奈川 と次々に表示されてしまうものを 茨城 群馬 千葉 埼玉 東京 神奈川 というように3県毎に改行をしたいのですが、 方法がわかりません。どなたかご指導お願いいたします。 <form method='POST' action='search_city.php'> <?php // MYSQLへ接続 $con = MYSQL_CONNECT("******","******","******"); mysql_select_db("jp00001"); // クエリの実行 $area_id = htmlspecialchars($_POST["area_id"]); $res = mysql_query("SELECT area.area_id, area.area_name, pref.pref_id, pref.pref_name FROM area INNER JOIN pref ON area.area_id = pref.area_id WHERE area.area_id='$area_id'"); // クエリのチェック if (!$res) { die('クエリーが失敗しました。'.mysql_error()); } // クエリの文字の表示 while ($row = mysql_fetch_assoc($res)) { ?> <label><font size="-1"> <input type="radio" name="pref_id" value="<?php echo $row['pref_id'] ?>"> <?php echo $row['pref_name'] ?></font></label> <? } ?> <tr> <td height='21' align="center" bgcolor='#DDFFFF'> <input type='submit' value='市区エリアへ'>

    • ベストアンサー
    • PHP
  • 配列に値が入らない

    PHP初心者です。 <?php $sql = sprintf('SELECT * FROM image WHERE img_url="%s"', mysql_real_escape_string('img_url') ); $record = mysql_query($sql)or die(mysql_error()); while($data = mysql_fetch_assoc($record)) { $image = array($data['img_url']); } ?> これで $image にはデータベースの img_url のフィールドの値がすべて代入されるはずだったのですが なぜか配列には何も値が入りません。 何が悪いのか、配列についていろいろ調べてはみたのですが、どうしてもわかりませんでした。 どうやったら値が入るようになるか、教えていただけないでしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • PHP 配列について

    phpとDBでシステムを作っています DBをよみながら配列と比較しています。 ループ中の配列で2回目以降がどうしても配列の値が入りません $Baitai[$cnt]で1回目は配列の値が来るのですが 2回目以降が一部の文字bしか入りません ご教授お願いします。 while($arr_record = mysql_fetch_assoc($rs)) { foreach($arr_record as $field_name => $field_value) {            if($field_value<>"") { echo $Baitai[$cnt]; $Baitai="Baitai".$k; if($Baitai[$cnt]==$field_value) { ?>       <input type="checkbox" value="<?php echo $field_value;?>" Name="<?php echo $Baitai;?>" checked><?php echo $field_value;?> <?php } else { ?> <input type="checkbox" value="<?php echo $field_value;?>" Name="<?php echo $Baitai; ?>"><?php echo $field_value;?> <?php } } $cnt=$cnt+1;             $k=$k+1; } }

    • ベストアンサー
    • PHP
  • PHPでjavascriptの2次元配列を宣言する

    はじめまして。 とっても困ってるので質問させてください。 「データベースからの取り出したデータをjavascriptで扱いたい」 下記のソースでjavascriptの2次元配列を宣言しているつもりなのですが、 データの取り出しが上手くいきません。。。 宣言自体ができてないのでしょうか??? PHPのソースを貼り付けます↓ echo "<script type=\"text/javascript\">"; echo "//<![CDATA["; echo "var SKind_name=new Array(".$temp.");"; for ($i=1;$i<=$cat_dtcnt;$i++) { $sql_scat_cnt = "SELECT COUNT(*) AS cnt FROM `map_subkind` WHERE kind_id = '".$i."'"; $res_scat_cnt = mysql_query($sql_scat_cnt) or die("データ抽出エラー"); $row_scat_cnt = mysql_fetch_array($res_scat_cnt, MYSQL_ASSOC); $scat_dtcnt = $row_scat_cnt["cnt"]; $temp = $scat_dtcnt+1; echo "SKind_name[".$i."]=new Array(".$temp.");"; echo "SKind_name[".$i."][0]=".$scat_dtcnt.";"; $sql_subcat= "SELECT * FROM `map_subkind` WHERE kind_id = '".$i."'"; $rst_subcat=mysql_query($sql_subcat) or die("データ抽出エラー"); $scatcnt = 1; while($row_scat=mysql_fetch_array($rst_subcat)) { echo "SKind_name[".$i."][".$scatcnt."] = \"".mb_convert_encoding($row_scat["skind_name"],"SJIS","EUC-JP")."\";"; $SKind_name_array[$i][$scatcnt] = mb_convert_encoding($row_scat["skind_name"],"SJIS","EUC-JP"); $scatcnt ++; } $scatcnt--; } echo "// --></script>";

  • データをカンマで区切る・・・

    do { echo $row['name'].", "; } while ($row = mysql_fetch_assoc($res)); このようにして、Mysqlから取り出したデータを表示する際に カンマで区切って表示したいのですが、 このままだとデータが最後のときにもカンマを打ってしまいます。 データが最後の場合はカンマを打たないようにするにはどうすればよいのでしょうか? (データを取り出す段階でGROUP_CONCATするというのはなしでお願いします)

    • ベストアンサー
    • PHP
  • mysql_real_escape_string

    php mysqlです。 $row = $stt->fetch(PDO::FETCH_ASSOC); したあと、 $rowに入っているデータに対して、 mysql_real_escape_string 関数をかましたあとのデータに変更するにはどうすればいいのでしょうか? よろしくお願い申し上げます。

    • ベストアンサー
    • PHP

専門家に質問してみよう