Perl日記

PerlとかRubyとかPHPとかPythonとか

PHPのarray_walkはforeachに置き換えよう

PHP: array_walk - Manual


array_walkはforeachに置き換えた方が圧倒的に可読性が良いと思う。
特に引数でそのまま無名関数を渡してしまう場合。

array_walk版
<?php
$array = array(10,20,30,40,50);

array_walk($array, function(&$i){ $i += 5; });

print_r($array);

//Array
//(
//    [0] => 15
//    [1] => 25
//    [2] => 35
//    [3] => 45
//    [4] => 55
//)
foreach版
<?php
$array = array(10,20,30,40,50);

foreach ($array as &$i) {
  $i += 5;
}

print_r($array);

//Array
//(
//    [0] => 15
//    [1] => 25
//    [2] => 35
//    [3] => 45
//    [4] => 55
//)


array_walkのいいところは、破壊的に配列の中身を走査できることのはずなのに、結局無名関数の引数で&を指定してあげないといけないのがなんかイケてない感じがする。
(&をつけないと第一引数の配列には変化はない)


どうせ&で参照を渡すことになるのなら、foreachでループして破壊してます感を出してくれた方が可読性は高いと思う。