よっしー
こんにちは。よっしーです(^^)
今日は、array_mapとarray_walkの違いについて解説しています。
背景
array_mapとarray_walkの違いについて調査する機会がありましたので、その時の内容を備忘として記事に残しました。
array_mapとarray_walkの違いとは
array_map
とarray_walk
は両方ともPHPの配列操作の関数ですが、その用途と動作は異なります。
array_map
array_map
は、指定した関数を配列の各要素に適用し、その結果を新しい配列として返します。- 構文:
array_map($callback, $array1, $array2, ...)
$callback
は適用する関数で、引数としてその時の要素の値を受け取ります。- 複数の配列を指定した場合、それらの要素は関数に引数として渡されます。
例:
$numbers = [1, 2, 3, 4, 5];
$doubled = array_map(function($n) { return $n * 2; }, $numbers);
// $doubled は [2, 4, 6, 8, 10]
array_walk
array_walk
は、指定した関数を配列の各要素に適用しますが、元の配列を変更します。新しい配列は返しません。- 構文:
array_walk($array, $callback, $param = null)
$callback
は適用する関数で、引数として要素の値とキーを受け取ります。$param
はオプションで、関数に渡す追加の引数です。
例:
$numbers = [1, 2, 3, 4, 5];
array_walk($numbers, function(&$n, $key) { $n *= 2; });
// $numbers は [2, 4, 6, 8, 10]
主な違いは、array_map
は新しい配列を返すのに対し、array_walk
は元の配列を変更する点です。また、array_walk
の方がキーへのアクセスが容易です。配列の内容を変更する必要がない場合はarray_map
を、変更する必要がある場合はarray_walk
を使うことが一般的です。
メリットとデメリット
array_map
とarray_walk
にはそれぞれメリットとデメリットがあります。
array_map
メリット:
- 元の配列を変更せずに新しい配列を作成できる
- 関数の戻り値を利用できる
- 複数の配列に対して操作できる
デメリット:
- 新しい配列を作成するため、メモリ使用量が増える
- キーへのアクセスが少し面倒
array_walk
メリット:
- 元の配列を直接変更できるので、メモリ使用量を節約できる
- キーと値の両方にアクセスできる
- 参照渡しが可能なので、値を直接変更できる
デメリット:
- 元の配列が変更されてしまう
- 関数の戻り値を利用できない
- 複数の配列に対する操作ができない
状況によってメリット・デメリットは変わってきますが、一般的には:
- 配列の内容を変更する必要がなく、新しい配列が欲しい場合は
array_map
を使う - 配列の内容を変更する必要があり、メモリ使用量を気にする場合は
array_walk
を使う
ということになります。array_walk
は副作用があるため、注意が必要です。読みやすさやメンテナンス性の点から、array_map
を使う方が安全といえます。
おわりに
今日は、array_mapとarray_walkの違いについて解説しました。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント