http://bloggdgd.blog28.fc2.com/blog-entry-272.html
> これより美しいコード書いた奴いたら名乗り出てこい!!11
個人的には、リンク先にあるこれが一番美しいと思うんですよね。
というわけで上記を関数に仕立て上げた、自称最も美しいarray_flatten。
iterator_to_array()が微妙だ…
RecursiveIteratorIteratorは値を突っ込んだ時点ではそのままの構造が保持されており、foreach()で取り出さないとフラットになってくれません。
とか書いても元の値が戻ってくるだけです。
こっちみたいに書ければ自称を外していいほど最強だったのにまったくもって非常に残念。
ていうか、せっかく自分で調べたのにAdil Baig @ AIdezignsって人がとっくに回答済だった。
> これより美しいコード書いた奴いたら名乗り出てこい!!11
function array_flatten($arr) { $arr = array_values($arr); while (list($k,$v)=each($arr)) { if (is_array($v)) { array_splice($arr,$k,1,$v); next($arr); } } return $arr; }
個人的には、リンク先にあるこれが一番美しいと思うんですよね。
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($a)); foreach($it as $v) { echo $v, " "; }array_splice()みたいなややこしい関数も使ってなくて圧倒的に見やすいですし。
というわけで上記を関数に仕立て上げた、自称最も美しいarray_flatten。
function array_flatten($arr) { return iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)), false); }
iterator_to_array()が微妙だ…
RecursiveIteratorIteratorは値を突っ込んだ時点ではそのままの構造が保持されており、foreach()で取り出さないとフラットになってくれません。
function array_flatten_fail($arr) { return (new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)))->getArrayCopy(); }
とか書いても元の値が戻ってくるだけです。
こっちみたいに書ければ自称を外していいほど最強だったのにまったくもって非常に残念。
ていうか、せっかく自分で調べたのにAdil Baig @ AIdezignsって人がとっくに回答済だった。
PR