配列の分割について

このQ&Aのポイント
  • 配列を2個づつ分割し、最初の2つのitem4の値だけを表示したいが、Notice: Undefined indexエラーが出る。
  • 原因は何か。
  • 配列の分割やforeachでの値の取り出しに関するエラーについて。
回答を見る
  • ベストアンサー

配列の分割について

下記のような配列グループが多数あるのですが、配列を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
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

array_chunkで分割した配列ですから、$food2[0]["0"]、$food2[0]["1"]、$food2[1]["2"]、のように分割されているハズです。それを提示されたようにforeachで回せば(最初の添え字が 0 固定なのに)$key2は"0","1","2"と全部出てきますから$food2[0]["2"]にアクセスしようとした時点でundefined indexになります。 >配列を2個づつ分割し、最初の2つ ということですから、$food2[0]からだけ表示すればいいんですよね。 foreach($food2[0] as $arr){ echo $arr["item4"]; } でいいのではありませんか?

cinnron
質問者

お礼

ご回答ありがとうございます。 言われたとおりにした所、上手くいきました!

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> 配列を2個づつ分割し が意味するのは、例示データの「どれとどれ」なのか、添え字を具体的に教えてください。

関連するQ&A

  • 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のエラーが解決できません

    $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
  • 多次元配列でキーを基準に並び変えする

    すいません。多次元配列でキーを基準に並び変えを行いたいのですが、解説サイトやここでの質問で も解決せず困っています。以下が実際の配列で四次元目の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
  • 配列型の宣言?

    こんにちは。 あるサイトで見たphpのサンプルなのですが、 postされた全ての値を配列に格納するもので、以下のような記述がありました。 foreach((array)$_POST as $key => $value){  $array[$key] = $value; } ポストされた全ての値を、配列$arrayに連想配列として格納しているのはわかるのですが、 foreachの、(array)というのはどういう働きをするものなのでしょうか。 これは、$_POSTが配列であるという宣言でしょうか。 それと、postされた値がない場合、$_POSTを配列だと宣言しておくことで、foreachのエラーを回避するような役割もあるのでしょうか。 恥ずかしながら、(array)のような記述をphpではあまり見ないような気がするのですが、なんというキーワード(?)で勉強すれば理解が深められるかもご教授頂けますと助かります。 宜しくお願い申し上げます。

    • ベストアンサー
    • 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
  • 配列の表示について

    すいません。下記の配列で [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
  • 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について

    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
  • 多次元配列から任意の配列を取り出す

    すいません。phpを初めて勉強中なのですが、少し分からない事があります。 例えば以下のような二次元配列なのですが、私がやりたい事は「キーを使った並び替え」と 「特定のキーの排除」を行い、任意の順番でテキストを展開させたいです。 foreachで回して配列をソートし3つのテキストを展開するまではできたのですが、 キーが「y」となっている配列のみを抜き出すというのがどうすれば良いのでしょう? いろいろサイトを見てるのですが、特定のキーが入っている配列を抜き出す(または排除) というのは無く、値を抜き出すなどしかありません・・。 $food["1"]["y"]= "aaa1.txt"; $food["2"]["e"]= "aaa2.txt"; $food["3"]["y"]= "aaa3.txt"; $food["4"]["y"]= "aaa4.txt"; ↓ $food["1"]["y"]= "aaa1.txt"; $food["3"]["y"]= "aaa3.txt"; $food["4"]["y"]= "aaa4.txt";

    • ベストアンサー
    • PHP
  • 多次元配列の形を保ちながら特定の箇所だけ値を変更

    PHP初心者 かつ 配列が苦手な私です。 勉強不足でありながら、助けを求めているのですが、どうにも時間がないので、どうかよろしくおねがいいたします。 多次元配列の形を保ちながら特定の箇所だけ値を変更したいのです。 $arrRet という多次元配列■Aを■Bのようにしたいのです。 つまり、キーがpriceだったらその値を消費税込の値にしたい のです。 $arrRet という名前は違う名前になってもかまいません。 ■A Array ( [0] => Array ( [date] = > 2012-06-01 11:11:11 [price] => 100 ) [1] => Array ( [date] = > 2012-06-02 22:22:22 [price] => 100 ) ) ■B Array ( [0] => Array ( [date] = > 2012-06-01 11:11:11 [price] => 105 ) [1] => Array ( [date] = > 2012-06-02 22:22:22 [price] => 105 ) ) ちなみに 消費税は$taxを使用します。 $taxの値は1.05が入っています。 こんな感じかな?と思うのですが、この後 なにをどうしたらよいのか全然わからないんです。 foreach($arrRet as $key1 => $aa) { foreach($aaas $key2 => $bb) { } } よろしくおねがいいたします!!

    • ベストアンサー
    • PHP

専門家に質問してみよう