array_reduceと arrayのsplat オペレーターを使うと、同じアレーを生成するという意味のない関数ができる。
$source_array=[3,2,4,5];
$nop_array=array_reduce($source_array, fn($carry,$item)=>[...$carry, $item],[]);
print_r($nop_array); //array=>[3,2,4,5]
で、パターンを使って、array_mapもarray_filterもarray_reduceで代用できるというお話
// array reduce to mimic array_map
$source_array=[3,2,4,5];
$double=function($x){
return $x*2;
};
$mapped_array=array_reduce($source_array,fn($carry,$item)=>[...$carry,$double($item)],[]);
print_r($mapped_array); //array=>[6,4,8,10]
//array reduce to mimic array_filter
$even_fn= function($x){ //return true if even
return ($x % 2)==0;
};
$filtered_array=array_reduce($source_array,
fn($carry,$item)=>$even_fn($item)?[...$carry,$item]:$carry,
[]);
print_r($filtered_array); //array=>[2,4]
めでたし、めでたし