• ベストアンサー

二次元配列の分割

よろしくお願いします。 $hoge = array( "one" => array("abc" => "100", "def" => "200", "ghi" => "300"), "two" => array("abc" => "110", "def" => "210", "ghi" => "310"), "three" => array("abc" => "120", "def" => "220", "ghi" => "320") "four" => array("abc" => "130", "def" => "230", "ghi" => "330") ); というような配列があったとき、 abcが110以下のときと、110より大きい場合で分割した配列を 用意したいと考えてます。 具体的には、 $hoge1 = array( "one" => array("abc" => "100", "def" => "200", "ghi" => "300"), "two" => array("abc" => "110", "def" => "210", "ghi" => "310"), ); と $hoge2 = array( "three" => array("abc" => "120", "def" => "220", "ghi" => "320") "four" => array("abc" => "130", "def" => "230", "ghi" => "330") ); に分割したいと考えています。 どのように記述すればよいのでしょうか?

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

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

あ。 >print_r($arr[0]['Issue']);} //071025 回したい大本の二次配列は$arrなのですかね。 >foreach($hoge as $key => $arr) 回したい変数の名前が$hogeになってます。 $hogeを$arrにすれば良いですけども、$arrがかぶってしまって変な挙動になる恐れがあります。 >foreach($hoge as $key => $arr) foreach([回したい配列] as [配列のキー] => [配列の値]) なので各変数を適切なものに書き換えましょう。 あとNo.1の方に提示していただいたforeachの項目を穴が開くほどよく読みましょう。

ribiribi
質問者

お礼

foreachを使用してなんとか解決しました。 ただ配列の結合が上手くいかなかったので 文字列の結合を使用してごまかしました。 大変助かりました、有難うございました。

その他の回答 (5)

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

閉じ括弧が一つ足らなく見えますが コピペミスですかね。 Noticeが出るならば$arr['Issue']をきちんと設定しておかねばなりません。 値が入ってこない可能性がある場合は  if(isset($arr['Issue']) { // ←'Issue'をキーとした値が存在するか といったチェックをどこかでやる必要があります。

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

あ。 $hoge1 = array(); $hoge2 = array(); foreach($hoge as $key => $arr) {  if($arr["abc"] <= 110)  {   $hoge1[$key] = $hoge[$key]; //<-修正  }  else  {   $hoge2[$key] = $hoge[$key]; //<-修正  } }

ribiribi
質問者

補足

ご丁寧な返信ありがとうございます。 しかしどうも上手くいきません。 以下置き換えたソースです。 $arr_p = array(); $arr_r = array(); foreach($hoge as $key => $arr) {  if($arr['Issue'] <= $TODAY) //←ここでエラーがでます。  {   $arr_r[$key] = $hoge[$key];  }  else  {   $arr_p[$key] = $hoge[$key];  } print_r($TODAY); //071024 print_r($arr[0]['Issue']);} //071025

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

失礼、条件が逆だった。 あとhoge1,hoge2へ入れる変数もおかしかった。 $hoge1 = array(); $hoge2 = array(); foreach($hoge as $key => $arr) {  if($arr["abc"] <= 110)  {   $hoge1[$key] = $arr[$key];  }  else  {   $hoge2[$key] = $arr[$key];  } }

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

$hoge1 = array(); $hoge2 = array(); foreach($hoge as $key => $arr) {  if($arr["abc"] >= 110)  {   $hoge1[$key] = $arr;  }  else  {   $hoge2[$key] = $arr;  } }

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

foreach http://www.php.net/manual/ja/control-structures.foreach.php で$hogeを全走査して array_push http://www.php.net/manual/ja/function.array-push.php でhoge1とhoge2に振り分ける 辺りでは?

ribiribi
質問者

補足

すみません、初心者なものでよくわからないのですが、 array_push は追加するための関数ではないのでしょうか?

関連するQ&A

専門家に質問してみよう