- ベストアンサー
多次元配列を、1次元の配列にする関数を書いてください。
以下のように、多次元配列の配列をペチャンコにする関数(array_flatten)ってどうかきますか? <?php $arr[0] = 'a'; $arr[1][0] = 'b'; $arr[1][1][0] = 'c'; $arr[1][1][1][0] = 'd'; $arr[1][1][1][1][0] = 'e'; $arr[1][1][1][2] = 'f'; $arr[1][1][2] = 'g'; $arr[1][2] = 'h'; $arr[2] = 'i'; function array_flatten($arg){ 処理; } $new_arr = array_flatten($arr); print_r($new_arr); ?> ↓ Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i ) ※関数のなかで、ペチャンコの配列を格納するための新しい配列を宣言すると、 同関数を再帰的に呼び出したら、その配列が初期化されますよね?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
function array_flatten($array){ static $result; if( is_array($array) ){ foreach($array as $val){ flat($val); } }else{ $result[]=$array; } return $result; } これで目的の挙動を得られるかと・・・ ポイントはstatic指定でしょうか?
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
せっかくなのでarray_walkをつかって・・・ <?php $arr[0] = 'a'; $arr[1][0] = 'b'; $arr[1][1][0] = 'c'; $arr[1][1][1][0] = 'd'; $arr[1][1][1][1][0] = 'e'; $arr[1][1][1][2] = 'f'; $arr[1][1][2] = 'g'; $arr[1][2] = 'h'; $arr[2] = 'i'; function array_flattent($item,$key,$ret){ if(is_array($item)) array_walk($item,"array_flattent",&$ret); else $ret[]=$item; } array_walk($arr,"array_flattent",&$new_arr); print "<pre>"; print_r($new_arr); print "</pre>"; ?> PHP5からは再帰的なarray_walk_recursive()なども用意されている ようです。
お礼
ありがとうございます確認しました! 皆さんの回答例、本当に勉強になります。 こちらは、やはり array_walk ですね。 PHP初心者なので、何の宣言もなく > array_walk($arr,"array_flattent",&$new_arr); いきなりリファレンスを渡しているところが、なんとも斬新です。 シンプルな回答例ありがとうございました! あ、今回の件とは関係ないですが、print_r や var_dump が見にくくて困ってました。<pre>タグ使って、出してやればいいのか・・・。 ありがとうございます。
- php504
- ベストアンサー率42% (926/2160)
いろんなやり方があるでしょうが function array_flatten($array){ $result = array(); foreach($array as $val){ if( is_array($val) ){ $result = array_merge($result, array_flatten($val)); }else{ $result[]=$val; } } return $result; }
お礼
ありがとうございます確認しました! > $result = array(); 私も、こうやって、再帰的に呼び出した時に、毎回初期化されて困ったな・・・、と思っていたのですが、 > $result = array_merge($result, array_flatten($val)); なるほど。 こうすれば、毎回新しい配列 $result で問題ないってことですね。 ANo.1 と、潜って行き方が根本的に違いますね。 勉強になりました!
お礼
ありがとうございます確認しました! static! 私が探していたのは、まさにこれです。 以下のページが参考になりました。 http://php.plus-server.net/language.variables.scope.html#language.variables.scope.static PHP歴一ヶ月なので、頑張りま~す。