foreachで配列から特定の値を取り出す方法

このQ&Aのポイント
  • foreachを使用して配列から特定の値を取り出す方法について質問します。
  • 配列内のitem2の値のみを取り出したいが、foreachで回すと全ての値が表示される問題があります。
  • 一度にitem2の値のみを取り出す方法を教えてください。
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数1

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

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

質問文を読む限りだと、 foreach( $food as $key1=>$array ){ echo $food["$key1"]["item2"]; } ――でよいような。

cinnron
質問者

お礼

ご回答ありがとうございます。どうも難しく考えていました。無事表示されました!

関連するQ&A

  • 配列の分割について

    下記のような配列グループが多数あるのですが、配列を2個づつ分割し、最初の2つのitem4の値だけを表示したいのですが、 例えば以下のようにarray_chunkを使って分けてからforeachで回して値を取り出すとNotice: Undefined indexエラーが出ます。(一応目的の「0 1」の値は出るのですが・・) このエラーは何が原因なのでしょうか。邪魔で仕方ありません。 <?php $food["0"]["item0"]="y"; $food["0"]["item1"]="bi"; $food["0"]["item2"]="5"; $food["0"]["item3"]="2012010100"; $food["0"]["item4"]="0"; $food["1"]["item0"]="y"; $food["1"]["item1"]="dou"; $food["1"]["item2"]="4"; $food["1"]["item3"]="2012010102"; $food["1"]["item4"]="1"; $food["2"]["item0"]="n"; $food["2"]["item1"]="co"; $food["2"]["item2"]="3"; $food["2"]["item3"]="2012010101"; $food["2"]["item4"]="2"; $food2 = array_chunk( $food, 2,true); foreach($food2 as $key1=>$array){ foreach($array as $key2=>$array2){ echo $food2["0"]["$key2"]["item4"]; } } ?>

    • ベストアンサー
    • PHP
  • phpのエラーが解決できません

    $food["1"]["item0"]="y"; $food["1"]["item1"]="bi"; $food["1"]["item2"]="1300"; $food["1"]["item3"]="20060630"; $food["2"]["item0"]="y"; $food["2"]["item1"]="bi"; $food["2"]["item2"]="1500"; $food["2"]["item3"]="20070630"; $e = "a"; if( $e = "a"){ foreach($food as $key1=>$array){ foreach($array as $key2=>$array2){ if ($food["$key1"]["item2"] <="1300") { unset( $food[$key1]); } } } } 上記のプログラムを書いてローカル環境で実行するとNotice Undefined offsetの警告が沢山 出ます。ググるなどして、未定義の変数などがある場合に出ると他のサイトで読んだのですが上記に特に未定義の 変数は無いように思うのですが・・。 (unsetをecho "hello";などに置き換えると警告は出ません) やりたい事は上記のような配列の集まりが数百個あり、 item2の値の数値により配列を消したりしたいのですが、警告を無くすにはどうしたらよいでしょうか。 (一時配列は1から順に増えていきます) phpを始めたばかりで解決方法を探しているのですがネット上では見つけられません・・。

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

    phpを今勉強中なのですがforeachで少し分からない部分があります。 例えば(1)はnのある配列を消去するだけのプログラムでして、これを (2)のように書き換えてみると、全て表示されてしまい、(1)と同じ動きをしません。 phpマニュアルを読む限り同じ動きをすると思うのですが、array_keys($key1)の中に うまく一時配列のキーが入っていないように思います。 どうしてでしょうか? (1) <?php $food["y"]["bb"]= "k1"; $food["n"]["bb"]= "k2"; $food["n"]["cc"]= "k3"; $food["k"]["dd"]= "k4"; foreach($food as $key=>$key1){ foreach($key1 as $key2=>$key3){ if($key=="n") unset($food[$key][$key2]); } } echo "<pre>"; print_r($food); echo "</pre>"; ?> (2) <?php $food["y"]["bb"]= "k1"; $food["n"]["bb"]= "k2"; $food["n"]["cc"]= "k3"; $food["k"]["dd"]= "k4"; foreach($food as $key=>$key1){ foreach($key1 as $key2=>$key3){ if(in_array("n",array_keys($key1))) unset($food[$key][$key2]); } } echo "<pre>"; print_r($food); echo "</pre>"; ?>

    • ベストアンサー
    • PHP
  • 多次元配列でキーを基準に並び変えする

    すいません。多次元配列でキーを基準に並び変えを行いたいのですが、解説サイトやここでの質問で も解決せず困っています。以下が実際の配列で四次元目の2012010101~2012010107の数字を昇順、 降順で並び変え、k1~k4の値を結果として表示したいのですが、phpでは不可能なのでしょうか? 散々調べましたが、多次元配列の値で並び替えるというのは見つけたのですが、私が行いたいのは あくまでキーの数字で並び変えです。 詳しい方いましたらアドバイスいただければ助かります $food["y"]["bi"]["1"]["2012010101"]= "k1"; $food["y"]["ko"]["2"]["2012010104"]= "k2"; $food["n"]["dou"]["3"]["2012010105"]= "k3"; $food["y"]["dou"]["4"]["2012010106"]= "k4"; $food["n"]["bi"]["5"]["2012010107"]= "k5";

    • ベストアンサー
    • PHP
  • foreachの疑問

    <pre> <?php $a=array('x'=>1,'y'=>2,'z'=>3); foreach($a as $key=>$value) { print"$key:$value\n"; } foreach($a as $key=>&$value) { $value="<<$value>>"; } foreach($a as $key=>$value) { print"$key:$value\n"; } ?> </pre> の応答が x:1 y:2 z:3 x:<<1>> y:<<2>> z:<<2>> となり x:1 y:2 z:3 x:<<1>> y:<<2>> z:<<3>> となりません。 どうすればよいでしょうか? 環境はFedoraCore4-PHP5(アップデータしたばかり)です。

    • ベストアンサー
    • PHP
  • 連想配列のキー値(連番)を基に、別の配列を作るには?

    下記のように、キー値の一部に連番を持った連想配列 があるのですが、このキー値と連番で別の配列を 簡単に作る方法は無いでしょうか? もとの配列 $ary = array("item0"=>"x","item1"=>"y","item2"=>"z","data0"=>"o","data1"=>"p","data2"=>"q"); 上の$aryから $item=array([0]=>"x",[1]=>"y",[2]=>"z"); $data=array([0]=>"o",[1]=>"p",[2]=>"q"); のような形の配列を得たいのです。 foreach($ary as $key => $val){ } の構文で、$key値を調べて分断し、新しい配列に pushしていくしかないでしょうか? ※PHP4.3です

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

    すいません。何度かここで質問しているのですが、いまいち分からない部分があります。 既に何十時間も悩んでいて解決しません。初歩的な質問ですがよろしくお願いします。 結果としてk2k3という表示を期待しているのですが・・。 まず、$key2にはk1k2k3という配列が入り、 それからarray_keys($key2)でキーを取得するのですから array_keys($key2)にはynbが配列として入りますよね? つまり [0]=y [1]=n [2]=b となり、 これをin arrayでyという値を探して、あった場合にはunsetで削除。 何がおかしいのかさっぱり分かりません。 すいませんが間違っている部分を教えてもらえませんか? <?php $food["y"]= "k1"; $food["n"]= "k2"; $food["b"]= "k3"; foreach($food as $key1=>$key2){ if(in_array("y",array_keys($key2))) unset($food[$key1]); } ?>

    • 締切済み
    • 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文について、今朝、回答いただいて、その時は分かったつもりだったのですが、 やっぱりよく分かっていなかったようなので、もう一度質問させてください。 今朝質問した内容は、下記です。 ▼配列の要素の値をループ中に変更して確認したいのですが、   http://okwave.jp/qa/q5943567.html 例えば、下記例のとき、上記と挙動が異なるのは、なぜでしょう? このforeachでは、値を書き換えできないので、 そもそも、上記と比較をしてはいけないのでしょうか? $arr = array("値1", "キー1" => "値2", "値3"); foreach($arr as $val){ $val = "{$val}の値利用"; echo $val."<br />"; } foreach($arr as $val){ echo $val."<br />"; } 1)$arrの内容を$valにコピー 2)$valに値を代入 3)$valを表示 4)1)へ戻る で、特に分からないのが、以下です。 上のforeachで、 代入後の値が表示されるのは、 なぜでしょうか。 今朝質問した「$arr as $key => $val」 のときと比較して、 どなたか解説していただけないでしょうか?

    • ベストアンサー
    • PHP
  • 配列の表示について

    すいません。下記の配列で [item4]の値(k1~k3)だけを全て表示する方法というのは どうするのでしょうか?わざわざ下記のようにキーを書かなければならないのでしょうか? item4の値だけ一気に表示させたいのですが・・。 echo $food["0"]["item4"]; echo $food["1"]["item4"]; echo $food["2"]["item4"]; $food[]=array("item0"=>"y","item3"=>"2012010101","item4"=>"k1"); $food[]=array("item0"=>"y","item3"=>"2012010104","item4"=>"k2"); $food[]=array("item0"=>"n","item3"=>"2012010105","item4"=>"k3");

    • ベストアンサー
    • PHP

専門家に質問してみよう