- ベストアンサー
二次元配列の分割
よろしくお願いします。 $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") ); に分割したいと考えています。 どのように記述すればよいのでしょうか?
- みんなの回答 (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の項目を穴が開くほどよく読みましょう。
その他の回答 (5)
- wp_
- ベストアンサー率54% (132/242)
閉じ括弧が一つ足らなく見えますが コピペミスですかね。 Noticeが出るならば$arr['Issue']をきちんと設定しておかねばなりません。 値が入ってこない可能性がある場合は if(isset($arr['Issue']) { // ←'Issue'をキーとした値が存在するか といったチェックをどこかでやる必要があります。
- wp_
- ベストアンサー率54% (132/242)
あ。 $hoge1 = array(); $hoge2 = array(); foreach($hoge as $key => $arr) { if($arr["abc"] <= 110) { $hoge1[$key] = $hoge[$key]; //<-修正 } else { $hoge2[$key] = $hoge[$key]; //<-修正 } }
補足
ご丁寧な返信ありがとうございます。 しかしどうも上手くいきません。 以下置き換えたソースです。 $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)
失礼、条件が逆だった。 あと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)
$hoge1 = array(); $hoge2 = array(); foreach($hoge as $key => $arr) { if($arr["abc"] >= 110) { $hoge1[$key] = $arr; } else { $hoge2[$key] = $arr; } }
- SAYKA
- ベストアンサー率34% (944/2776)
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に振り分ける 辺りでは?
補足
すみません、初心者なものでよくわからないのですが、 array_push は追加するための関数ではないのでしょうか?
お礼
foreachを使用してなんとか解決しました。 ただ配列の結合が上手くいかなかったので 文字列の結合を使用してごまかしました。 大変助かりました、有難うございました。