• 締切済み

foreachで配列を作る

$array = array("id","name","address","tel","point","a1"); $res = $db->query($sql);  //sqlのクエリー while ($row = $res->fetchRow( DB_FETCHMODE_ASSOC )) { $data_list[]=array( $array[0]=>$row["$array[0]"], $array[1]=>$row["$array[1]"], $array[2]=>$row["$array[2]"], $array[3]=>$row["$array[3]"], $array[4]=>$row["$array[4]"], $array[5]=>$row["$array[5]"]); } をforeachを使って $array = array("id","name","address","tel","point","a1"); $res = $db->query($sql);  //sqlのクエリー while ($row = $res->fetchRow( DB_FETCHMODE_ASSOC )) { foreach(~){             //処理     } のようにかきかえたいのですがどうしたらいいでしょうか?foreachをしらべていろろやったのですがうまくいきません。よろしくおねがいします。  ちなみに$data_list[]の配列はArray ( [0] => id [1] => name [2] => address [3] => tel [4] => point [5] => a1 ) Array ( [0] => Array ( [id] => 0 [name] => ここあ [address] => 東京 [tel] => 2 [point] => 2 [a1] => 2 ) [1] => Array ( [id] => 1 [name] => 太郎 [address] => 東京 [tel] => 3 [point] => 5 [a1] => あ ) [2] => Array ( [id] => 4 [name] => 五郎 [address] => 東京 [tel] => 0 [point] => 1 [a1] => あああああ ) [3] => Array ( [id] => 5 [name] => 士郎 [address] => 神奈川 [tel] => 26 [point] => 5 [a1] => ああああああああああ ) …となります。

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

みんなの回答

  • wp_
  • ベストアンサー率54% (132/242)
回答No.2

$row = $res->fetchAll( DB_FETCHMODE_ASSOC ); では駄目なのでしょうか。 冗長ですが、配列位置を明示的に書くならば $ii = 0; while ($row = $res->fetchRow( DB_FETCHMODE_ASSOC )) {  foreach($array as $val)  {   $data_list[$ii][$val]=$row[$val];  }  $ii++; } ですかね。

03d1081
質問者

お礼

while ($row = $res->fetchRow( DB_FETCHMODE_ASSOC )) { foreach ($array as $key=>$val) { $data["$val"] = $row["$val"]; } $data_list[] = $data; } でできました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

こんな感じですかね? $data=&$data_list[]; foreach($array as $val){ $data[$val]=$row [$val]; }

03d1081
質問者

お礼

$data_list[] = $data にしないとだめみたいです。

関連するQ&A

  • DB_FETCHMODE_ASSOCの時、結合した二つのテーブルから同一名のカラムのレコードを連想配列で取得できないのか??

    よろしくお願いします。 $db =& DB::Connect($dsn, array()); $db->setFetchMode(DB_FETCHMODE_ASSOC); とし、 $res = $db->query("select A_t.ID, B_t.ID from A_t, B_t where A_t.NO = B_t.NO"); のようにsqlを発行した時、 while($row = $res->fetchrow()){ //..... } で、$rowに値を格納しようとしたのですが、 print $row[A_t.ID]; などとすると、 Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting ']' のようなエラーが出てしまいます。 $row[ID]; では、Aテーブルから取得したレコードなのかBテーブルから取得したレコードなのか判別できないのでダメだと思います。 $db->setFetchMode(DB_FETCHMODE_ORDERD); にした場合は、$row[0]、$row[1] の添字配列を使用することによって、AテーブルのIDカラムのレコードもBテーブルのIDカラムのレコードもprintすることが出来ましたが、 $db->setFetchMode(DB_FETCHMODE_ASSOC); では、上記のように結合した両テーブルに同一名のカラム名があると、 その同じ名前を持つカラムから連想配列にデータを渡すことは出来ないのでしょうか?? どなたか詳しい方いらっしゃったらご教授くださると幸いです。 よろしくお願いしますm(_ _)m

    • ベストアンサー
    • PHP
  • php pear mdb2に質問です。

    php pear mdb2に質問です。 以下の関数でエラーが出ます。 間違っているところがあれば、回答お願いします。 function product_info($id) { global $db; $res = $db->query("SELECT * FROM product WHERE id=?", array($id)); if ($res != null) { $row = $res->fetchrow(MDB2_FETCHMODE_ASSOC); return $row; } return null; }

    • ベストアンサー
    • PHP
  • if()文が上手くいかない。パート2

    $sql= 'SELECT a.id,a.name,a.ji,a.pass,b.id,b.name,b.day,b.st,b.sh,b.tday,b.tt,b.th,b.go FROM t AS a, ti AS b WHERE a.id=b.id group by a.id ORDER BY b.day DESC'; $res = mysql_query($sql); $sql2 = 'SELECT * FROM ti'; $res2 = mysql_query($sql2); while($row = mysql_fetch_array($res)){ $st = $row['st']; } while($row2 = mysql_fetch_array($res2)){ if(!$st==""){ echo $row2['name'].'<br>出勤<br>'; }else{ echo $row2['name']; } } 改善点御教授下さい。お願いします。 参考:http://okwave.jp/qa/q7424432.html

    • 締切済み
    • PHP
  • PEARを使ったフェッチのしかた。

    いつもお世話になっています。 pear と phpを使ったclassを勉強しており 行き詰った点があったので教えてください。 **** class.php ************************ require_once("DB.php"); class DB_Class{ var $db_object;//DB::connectが入る var $db = "mysql"; var $db_user = "user"; var $db_host = "localhost"; var $db_name = "db_name"; var $pass = "pass"; function DB_Class(){ //コンストラクタ $db_string = $this->db."://".$this->db_user.":".$pass."@".$this->db_host."/".$this->db_name; $this->db_object = DB::connect($db_string); } } **** test.php ******************************** require_once("class.php"); $obj = new DB_Class(); $sql = "select * from TEST_TABLE"; $res = $obj->db_object->query($sql); while($row =$res->fetchRow(DB_FETCHMODE_ASSOC)){ print("<td>".$row["TEST"]."</td>"); } class.phpファイルのメンバ変数 var $db_objectにDB::connectが入っており、 test.phpでfetchRowを使ってDBの内容を 取り出したいのですが、 fetchRowメソッドが見つからないというエラー がでます。 それまでのqueryメソッドまではエラーがなく 呼び出せます。 while($row =$res->fetchRow(DB_FETCHMODE_ASSOC)) ここを $res->$obj->db_object->fetchRowや $res->$obj->$this->DB_object->fetchRowや とにかく色々な方法を試してみたのですが うまくいきませんでした。 どなたかご教授お願い致します。

    • ベストアンサー
    • PHP
  • 配列に格納された値の変更について

    お世話になります。現在下記のように配列に値を入れています $result=pg_query($db,$sql); $status=pg_result_status($result); $data=array(); while($row=pg_fetch_row($result)){ $data1[]=array("namae_id"=>$row[0],"namae"=>$row[1]); } 値を格納してからnamaeの部分の値を変更したいのですが、どのようにしたらいいでしょうか? 例えばnamae_id=4のnamaeの値を太郎から太郎 様という感じで変更したいのです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • foreachの表示に追加するには

    http://okwave.jp/qa2460708.html と同じようなテーブル構造で、同じようなhtmlへの書き出しを行っています。 No.1さんの回答の下記のスクリプトを参考にし、うまく表示することができました。 $sql="SELECT `ID`,`SHOPNAME` FROM `SHOP`"; $res = mysql_query($sql,$link); while ($rows = mysql_fetch_assoc($res)) { $SHOP[$rows["ID"]]=$rows["SHOPNAME"]; } $sql="SELECT `ID`,`ITEMNAME` FROM `ITEM`"; $res = mysql_query($sql,$link); while ($rows = mysql_fetch_assoc($res)) { $ITEM[$rows["ID"]]=$rows["ITEMNAME"]; } foreach($SHOP as $key1=>$val1){ foreach($ITEM as $key2=>$val2){ $LINK[$key1][$key2]="&nbsp;"; } } $sql="SELECT `SHOP`,`ITEM` FROM `LINK`"; $res = mysql_query($sql,$link); while ($rows = mysql_fetch_assoc($res)) { $LINK[$rows["SHOP"]][$rows["ITEM"]]="○"; } print<<<eof <table border> <thead> <tr> <th>&nbsp;</th> eof; foreach($ITEM as $key2=>$val2){ print "<th>$val2</th>"; } print<<<eof </tr> </thead> <tbody> eof; foreach($SHOP as $key1=>$val1){ print "<tr>"; print "<td>$val1</td>"; foreach($ITEM as $key2=>$val2){ print "<td>{$LINK[$key1][$key2]}</td>"; } print "</tr>"; } print<<<eof </tbody> </table> eof; しかし、下記のテーブルに項目が1つ追加され、それも表示できるようにして欲しいと依頼されました。 Table:SHOP ID  SHOPNAME STATION ------------------------ 1   東京 | 表参道 2   大阪 | 梅田 3   福岡 | 天神 (略) 結果としては下記のように表示したいです。 NAME |STATION|化粧品|家具 |園芸 |食品 |家電 | ------------------------------------------------ 東京 | 表参道|   |   |   | ○ |   | 大阪 | 梅田 |   |   |   |   | ○ | 福岡 | 天神 | ○ | ○ |   |   |   | (略) 配列をよく理解できていないため、スクリプトをそのまま真似して $STATION[$rows["ID"]]=$rows["STATION"]; を作ったり $SHOP[$rows["ID"]][$rows["STATION"]]=$rows["SHOPNAME"]; を作ったりして無理矢理展開してみようとしましたが やはり表がぐちゃぐちゃになってしまいます。 どうすればうまく表示できるか、アドバイス頂けませんでしょうか。

    • ベストアンサー
    • PHP
  • mysqlからphpに表示ですべての項目を出したい

    phpとmysqlの勉強をしているのですが、出したい項目がでてきてくれません。 今mysqlでidとnameとpriceの項目を作っているのですが、以下だとどうしてもnameしか出てきてくれません。 どうすれば3つの項目がでてくれますでしょうか? よろしくお願いします。 <?     mysql_connect('localhost' , 'root' , '') or die(mysql_error());     mysql_select_db('db1'); mysql_query('SET NAMES UTF8'); $sql="SELECT * FROM syouhin"; $res=mysql_query($sql); $options=""; while($row = mysql_fetch_array($res,MYSQL_ASSOC)){ $options.="<input type=\"radio\" name=\"syouhin1\" value='{$row['id']}' checked>        {$row['name']}\n<br>"; } $select="{$options}</select>\n";     print $select; ?>

    • ベストアンサー
    • PHP
  • foreachで多次元配列を生成

    こんにちわ。 配列をforeachでループさせて、それを多次元配列に入れていくことは可能でしょ うか? 例えば以下のようなデータがあるとします。 ---meibo.dat-------- c21<>田中<>21<>東京 c22<>佐藤<>22<>大阪 -------------------- ---test.php----------------------------------------------------- <? $list_meibo = file("meibo.dat"); foreach($list_meibo as $temp){    $i=split("<>",$temp);    $a=array($i[0] => array("name"=>$i[1],"age"=>$i[2],"ad"=>$i[3]),); } ?> ------------------------------------------------------------------- これでは $a=array("c21"=>array("name"=>"田中","age"=>"21","ad"=>"東京"), "c22"=>array("name"=>"佐藤",age"=>"21","ad"=>"大阪"),); という具合になってくれないでしょうか? これでいくと、配列の最後の要素のみデータに残ります。 どのようにしたらよいでしょうか? ご教授お願いします。

    • ベストアンサー
    • PHP
  • 配列へのデータセット方法

    AテーブルのnameフィールドをMySQLのSELECT文で読込み、結果のnameフィールドを配列$arynameにセットしたいとおもいます。 配列の結果は、 array([0]=>aaa [1]=>abc [2]=>def [3]=>ggg) となる様にしたいのですが、結果が上手くいきませんでした。 教えてください。 $sql1="SELECT name FROM `A`"; $db->query($sql1); $cnt=1; while($db->next_record()){ $name=$db->f("name"); $aryname=array($name); $cnt++; }

    • 締切済み
    • PHP
  • 別ファイルのfunction

    別ファイルのfunctionを使いたいのですが3つのfunctionのうちsql()しかつかえません。 まだ作成とちゅうでfunctonがつかえるかの確認中です。共通でつかいたいのできた画面によって表示する項目をかえるためにテンプレートで制御してます。sqlから配列を作ってpagerでリスト表示しようとしてます。 sakusei.php <? //sql作成 function sql(){ $sql = "select * from shop_t where point=4"; $sql = $sql." order by id asc"; return $sql; } //配列作成 function hairetu(){ $list_data[] = array( "id"=>$row["id"], "name"=>$row["name"], "address"=>$row["address"], "tel"=>$row["tel"], "point"=>$row["point"], "a1"=>$row["a1"]); return $data; } //テンプレート選択 function tmple(){ $tpl="./sample.tpl"; return $tpl; } ?> sample.php <?php session_start(); require_once("sakusei.php"); @ini_set('include_path', './includes/Smarty'.PATH_SEPARATOR.ini_get('include_path')); @ini_set('include_path', './includes/'.PATH_SEPARATOR.ini_get('include_path')); require_once("DB.php"); require_once("Pager/Pager.php"); require_once("Smarty/libs/Smarty.class.php"); //新しい画面からきたときの処理 if(isset($_POST[db])){ session_unset(); } if(isset($_SESSION["db"])){ } else { $_SESSION["db"]=$_POST[db]; } if(isset($_SESSION["basyo"])){ } else { $_SESSION["basyo"]=$_POST[basyo]; } //データベースからデータを取得する $datasource = "mysql://root:@localhost/".$_SESSION["db"]; print"$datasource"; $db = DB::connect($datasource ); mysql_query("SET NAMES UTF8"); $basyo=$_SESSION["basyo"]; $sql=sql(); if($_SESSION["sql"]==""){ $_SESSION["sql"]=$sql; } print $_SESSION["sql"]; //クエリ作成 $res = $db->query($_SESSION["sql"]); //データを配列に格納 $list_data=new hairetu();  ←※エラー行 while ($row = $res->fetchRow( DB_FETCHMODE_ASSOC )) { $data_list } //データベース後処理 $res->free(); $db->disconnect(); //Pagerへのデータ割り当て処理 $perPage=3; $params=array("perPage"=>$perPage, "itemData"=>$data_list, "delta"=>5, "altFirst"=>"First", 'firstPageText' => '最初', 'altFirst' => '最初', 'lastPageText' => '最後', 'altLast' => '最後', ); $o_page=Pager::factory($params); foreach($o_page->getPageData() as $item){ $data_list_for_page[]=$item; } //Smartyへの割付処理 $smarty=new Smarty; $smarty->template_dir = "./templates"; $smarty->compile_dir = "./templates_c"; //$smarty->cache_dir = "./cache"; $smarty->assign("list", $data_list_for_page); $navi=$o_page->getLinks(); $smarty->assign("pageNavi", $navi['first'].$navi['all'].$navi['last']); //テンプレート表示 $tql=new tmple();  ←※エラー行 print $tql; $smarty->display("$tpl"); ?> Fatal error: Class 'hairetu' not found in D:\xampp\htdocs\rei\pager\sample.php on line~ Fatal error: Class 'tmple' not found in D:\xampp\htdocs\rei\pager\sample.php on line~ がエラーになります。。よろしくお願いします。。

    • 締切済み
    • PHP

専門家に質問してみよう