忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/07/21 17:51 |
PHP5.4.7 PHPでarray_flatten関数
http://bloggdgd.blog28.fc2.com/blog-entry-272.html
> これより美しいコード書いた奴いたら名乗り出てこい!!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


2013/05/01 23:59 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP5.4.7 PHPでarray_flatten関数のパフォーマンス測定 | HOME | PHP5.4.4 SplPriorityQueue>>
忍者ブログ[PR]