電子書籍の厳選無料作品が豊富!

よろしくお願いします。

$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")
);
に分割したいと考えています。

どのように記述すればよいのでしょうか?

A 回答 (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の項目を穴が開くほどよく読みましょう。
    • good
    • 0
この回答へのお礼

foreachを使用してなんとか解決しました。
ただ配列の結合が上手くいかなかったので
文字列の結合を使用してごまかしました。

大変助かりました、有難うございました。

お礼日時:2007/10/29 13:43

閉じ括弧が一つ足らなく見えますが


コピペミスですかね。

Noticeが出るならば$arr['Issue']をきちんと設定しておかねばなりません。
値が入ってこない可能性がある場合は
 if(isset($arr['Issue']) { // ←'Issue'をキーとした値が存在するか
といったチェックをどこかでやる必要があります。
    • good
    • 0

あ。



$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

補足日時:2007/10/26 09:21
    • good
    • 0

失礼、条件が逆だった。


あとhoge1,hoge2へ入れる変数もおかしかった。

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

$hoge1 = array();


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

foreach


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

辺りでは?

この回答への補足

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

補足日時:2007/10/25 10:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!