• ベストアンサー

配列の初期化について(foreachを使う際)

配列を、foreachの中で処理して、再び配列に入れたいです。 foreach ($a as $b) {   $tmp[]=処理($b); } ってやると、配列で取得できるのですが、 $tmp=array(); foreach ($a as $b) {   $tmp=処理($b); } ってやると、配列にならずに、 1つしかとれません。 どちらも、配列を初期化しているつもりなのですが、 $tmp=array();と、$tmp[]では、何が違うのでしょうか?

  • re999
  • お礼率61% (476/777)
  • PHP
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

> $tmp=array();と、$tmp[]では、何が違うのでしょうか? 比較対象が違っているような。 「$tmp[]=処理($b);」と「$tmp=処理($b);」との違いかと。 前者は配列要素の追加ですが、後者は単なる代入です。 詳しくは、phpのリファレンスなどをご覧ください。

re999
質問者

お礼

ありがとうございましたー

関連するQ&A

  • foreachで多次元配列にしたくないのですが……

    foreachで多次元配列にしたくないのですが、多次元配列になってしまいます。 なぜでしょうか? ■$hoge Array (  [0] => 3  [1] => 9 ) ■処理 foreach ($hoge as $val){  $result[]= 関数($val); } ■期待している結果 Array (   [0] => Array     (       [id] => 1       [created_at] => 2013-08-01     )   [1] => Array     (       [id] => 2       [created_at] => 2013-08-02     ) ) ■実際の結果 Array (   [0] => Array     (       [0] => Array          (            [id] => 1            [created_at] => 2013-08-01          )     )   [1] => Array     (       [0] => Array          (            [id] => 2            [created_at] => 2013-08-02          )     ) )

    • ベストアンサー
    • PHP
  • 配列の初期化

    表題の件で質問があります。 //------------------------------------// $A_array = array("1", "2", "3"); $B_array = array("9", "8"); for($cnt=0;$cnt<count($A_array);$cnt++){ $test[] = $A_array[$cnt]; } for($cnt=0;$cnt<count($B_array);$cnt++){ $test[] = $B_array[$cnt]; } ※わかりやすいようの簡単に書いてみました。 //------------------------------------// 上記の処理の場合配列testには ("9", "8", "3")となってしまい、 ("9","8")のデータを取得できません。 簡単に言うと配列名を使いまわししたいと考えています。関数かなにかで配列の中身を初期化するような ものはありますでしょうか?

    • 締切済み
    • PHP
  • 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
  • 多次元配列で、foreachを使って、key値を

    多次元配列で、foreachを使って、key値を入れ替えているのですが、 なんで、こうなるか分かりません。  $x = array();  $x[] = array(   "id" => 1,   "name" => "JavaScript",  );  $x[] = array(   "id" => 5,   "name" => "PHP",  );  $z = array();  foreach($x as $key => $value){   $z[$value["id"]] = $value;   }  print_r($z); 配列のKEYをIDに変更しているのですが、 なんで、こうなるのでしょうか? 特に、  $z[$value["id"]] = $value; が分かりません。 例えば、foerachの途中で、var_dumpすると、 1回目だと、 ◆$key 0 ◆$value Array (  [id] => 1  [name] => JavaScript ) ◆$value["id"] 1 まではいいのですが、 ◆$z[$value["id"]] の値が見れません。 ここはどんな処理をやっているのでしょうか?

    • ベストアンサー
    • 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
  • 参照変数の親配列を取得

    データの多次元配列があって、値に応じて動的に関数を選択し 中身の値を引数で渡すみたいな感じの処理をしています ほとんどの処理は中身の値だけあれば事足りるのですが 稀にキー値を使いたい処理がでてきます 本当に稀なので引数にキー値も渡すようにするのは 無駄が多くなるように思うので避けたく できれば参照変数で渡される値から 親配列でのキー値を取得したいと思っています $arr2A=array('a'=>array('fnc'=>'A','あ','い','う'),'b'=>array('fnc'=>'B','か','き','く'),'c'=>array('fnc'=>'C','さ','し','す')); $arr2B=array('a'=>array('fnc'=>'A','あ','い','う'),'b'=>array('fnc'=>'B','か','き','く'),'c'=>array('fnc'=>'C','さ','し','す')); $arr2C=array('a'=>array('fnc'=>'A','あ','い','う'),'b'=>array('fnc'=>'B','か','き','く'),'c'=>array('fnc'=>'C','さ','し','す')); foreach($arr2A as $key=>$val){ $fncs[$val['fnc']]($val); } foreach($arr2B as $key=>$val){ $fncs[$val['fnc']]($val); } foreach($arr2C as $key=>$val){ $fncs[$val['fnc']]($val); } $fncs=array( A=>function(&$arr){ }, B=>function(&$arr){ }, C=>function(&$arr){ //ここで稀にキー値も使いたい }); 実際のコードはかなり長いので載せられませんが 要約すると上記のような感じの処理です まずどのデータ配列の集合から渡されたのかが明確ではありませんので indexOfなどでキー値を得るのというのが難しいです 現在は、その処理が必要なデータ行について処理前に 中身にキー値をあらかじめ入れてしまう というように対応しているので、一応解決はしているのですが もし参照変数から親配列を得る方法が あればと思い質問させていただきました ”そんなものはない”という回答も あきらめつくのでお願いします

    • ベストアンサー
    • PHP
  • PHPのforeachでMysqlにINSERT

    PHPのforeach文を使いMysqlにデータをINSERTしたいです。 配列$resultは以下のような連想配列になっています。 Array ( [0] => Array ( [A] => 1 [B] => 2 [C] => 3 [D] => 4 [E] => 5 ) [1] => Array ( [A] => 2 [B] => 4 [C] => 6 [D] => 8 [E] => 10 ) ) 上記の連想配列をforeach()文で以下の処理をします。 foreach ($result as $key => $value) { /** * データベースへの追加(新規追加時だけ実行。コメント忘れずに) */ $sql = $pdo->prepare('INSERT INTO sample(a, b, c, d, e) VALUES(:a, :b, :c, :d, :e)'); $sql->execute(array(':a' => $value[A], ':b' => $value[B], ':c' => $value[C], ':d' => $value[D], ':e' => $value[E])); } その後データベースでselect * from test;とすると1行目のデータしか格納されていません。原因が不明です。 print すると期待する配列要素が表示されますので配列のデータ配置不備ではありません。 アドバイス頂きたくお願い申し上げます。

    • ベストアンサー
    • PHP
  • foreachについて

    下記の配列についてitem2の値のみ取り出したいのですが、 foreach($food as $key1=>$array){ foreach($array as $key2=>$array2){ echo $food["$key1"]["item2"]; } } foreachで回して取り出すと555444333となります。 543という結果が欲しいのですが、 実際には下記の配列が数百と大量にあり、一次元配列の数字は下記のように0から1ずつ増えていきます。(二次元目のキーは全てitem0~item2となっています) キーの変更をしないでitem2の値のみ一度に取り出すにはどうしたらよいのでしょうか? (取り出す前に配列の削除などのプログラムもあるため、0から順番に並んでいるとは限りません。 ) $food["0"]["item0"]="y"; $food["0"]["item1"]="bi"; $food["0"]["item2"]="5"; $food["1"]["item0"]="y"; $food["1"]["item1"]="dou"; $food["1"]["item2"]="4"; $food["2"]["item0"]="n"; $food["2"]["item1"]="co"; $food["2"]["item2"]="3";

    • ベストアンサー
    • PHP
  • phpにてforeachで配列の値が取り出せない

    以下のコードで「print $value」が空っぽなのですが なにが間違っているのかがわかりません。 ---------------------- $a=1 $b=2 $c=3 $d=4 $num = array($a,$b,$c,$d); foreach($num as $value){ print $value; } ---------------------- 初歩的な質問で恐れ入りますが 間違っている箇所があれば指摘いただきたいです。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 配列の操作に関して

    perlプログラミング初心者です。 質問なのですが、ある配列array1に関して foreach(@array1){ ・・・・・・ } という操作をしています。この操作を@arrray2,@array3,@array4に関して、ループを使って行いたいのですがどのようにすればよいのでしょうか。配列の配列を作って @Array = qw/ @array1 @array2 @array3 @array4/; として foreach構文を使うと、@array1が展開されずに処理できませんし・・ 初歩的なことだと思いますがアドバイスお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう