PHPのarray_filterは添字を維持するので気をつけろ
やることはPerlのgrepやRubyのArray#selectと同じなのに、PHPのarray_filterは添字を維持してフィルタしてくれやがる。
[10, 11, 12, 13, 14, 15, 16].select{|i| i % 2 == 1} #=> [11, 13, 15]
<?php array_filter([10, 11, 12, 13, 14, 15, 16], function($i){ return $i % 2; }); //=> Array //=> ( //=> [1] => 11 //=> [3] => 13 //=> [5] => 15 //=> )
なので、array_filterした結果の先頭を添え字0で取ろうとしてもとれない。
<?php $numbers = array_filter([10, 11, 12, 13, 14, 15, 16], function($i){ return $i % 2; }); var_dump($numbers[0]); //=> Notice: Undefined offset: 0 in php shell code on line 1
array_shiftならとれる。
<?php echo array_shift($numbers); //=> 11
なんだかな。