明日も楽をするために

めんどくさがりなITエンジニアが書くメモ帳

PHP5.2でSwiftみたいなmapや、filterみたいなことして見たい

結論:できませんでした。釣りタイトルで申し分けない(´;ω;`)

付き合って頂ける方は下にスクロールをどうぞ




swiftのmapやfilterみたいなことPHPで出来たらいいなぁーと考えてたら、もしかしたら自分が知らないだけで似たようなこと出来るのでは?
PHPのドキュメント漁ってたらあるものを見つけた

PHP: array_map - Manual
PHP: array_walk - Manual

array_mapとarray_walkである
mapって同じ名前が付いているので期待できる!!!

関数はarray_walkが、array_mapの上位互換な感じがあるので以下はarray_walkで説明

<?php
$data = array(1 => 'りんご', 2 => 'みかん', 3=> 'ぶどう');
array_walk($data, function(&$value, $key) {
    $value = $value."ジュース";
});
var_dump($data);

array_walkは第一引数に配列を、第二引数にCallBackを指定することで配列内の値に対して変更を加えることができます。

しかし残念ながらこれはPHP5.3以降にできる書き方。PHP5.2は無名関数が使えないのだ!!

ちなみにPHP5.2で書くと

<?php
$data = array(1 => 'りんご', 2 => 'みかん', 3=> 'ぶどう');
array_walk($data, create_function('&$value, $key',
    '$value = $value."ジュース";'
));
var_dump($data);

create_functionだと!?・・・

(ヽ´ω`)





それでもPHP5.3なら!!

PHP5.3なら!!

foreachとarray_walkの処理速度比較 - rh7's blog

foreachの方がはやい・・・





それでもarray_walkにも何かいいところが!!

PHP5.3.14以降のarray_walkで内部ポインタが破壊される – この先生きのこるには





foreachイイヨネ!!