配列の各要素に処理を施す方法として、array_mapとforeachがあると思いますが、ふとしたきっかけでforeachで参照渡しを使う方法を知ったのでメモ。
array_mapよりforeachを使った方が高速らしい。
array_map()
$arr = array(1,2,3,4);
$arr_mapped = array_map(function($value){
//ここでreturnした値が配列の各要素に格納される
return $value * 2;
},$arr);
dd($arr_mapped);
//array:4 [
// 0 => 2
// 1 => 4
// 2 => 6
// 3 => 8
//]
foreach
$arr = array(1,2,3,4);
//参照ではないため、元の$arrの値は変わらない
//中で別変数を定義してそこに格納する
foreach($arr as $value){
$arr_mapped[] = $value * 2;
}
dd($arr_mapped);
//array:4 [
// 0 => 2
// 1 => 4
// 2 => 6
// 3 => 8
//]
foreach参照渡し
$arr = array(1,2,3,4);
//$arrの各要素への参照に各要素の2倍を入れる形になる
//元の$arrの値が変わる
foreach($arr as &$value){
$value = $value * 2;
}
//$valueへの参照が残っているためここで解除しておく
unset($value);
dd($arr);
//array:4 [
// 0 => 2
// 1 => 4
// 2 => 6
// 3 => 8
//]
個人的には参照渡しの場合は最後にunset()
しないといけないので、foreach
内で変数宣言するやり方が分かりやすくていいかなーと思いました。
でも新しい変数定義するってことはその分メモリ食うってことだから3番目のやり方の方が早いのかな。。
時間があれば計測してみようと思います。