こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

二次元配列の分割

よろしくお願いします。

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

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

投稿日時 - 2007-10-24 20:40:54

QNo.3458161

困ってます

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

あ。

>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の項目を穴が開くほどよく読みましょう。

投稿日時 - 2007-10-26 14:14:52

お礼

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

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

投稿日時 - 2007-10-29 13:43:51

ANo.6

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.5

wp_

閉じ括弧が一つ足らなく見えますが
コピペミスですかね。

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

投稿日時 - 2007-10-26 13:55:49

ANo.4

wp_

あ。

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

投稿日時 - 2007-10-25 19:28:34

補足

ご丁寧な返信ありがとうございます。
しかしどうも上手くいきません。

以下置き換えたソースです。

$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:31

ANo.3

wp_

失礼、条件が逆だった。
あとhoge1,hoge2へ入れる変数もおかしかった。

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

投稿日時 - 2007-10-25 10:29:48

ANo.2

wp_

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

投稿日時 - 2007-10-25 10:27:04

ANo.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に振り分ける

辺りでは?

投稿日時 - 2007-10-24 20:56:28

補足

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

投稿日時 - 2007-10-25 10:13:39

あなたにオススメの質問