PHP入門:array_mapとarray_walkの違い

スポンサーリンク
PHP入門:array_mapとarray_walkの違い ノウハウ
PHP入門:array_mapとarray_walkの違い
この記事は約3分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、array_mapとarray_walkの違いについて解説しています。

スポンサーリンク

背景

array_mapとarray_walkの違いについて調査する機会がありましたので、その時の内容を備忘として記事に残しました。

array_mapとarray_walkの違いとは

array_maparray_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_maparray_walkにはそれぞれメリットとデメリットがあります。

array_map

メリット:

  • 元の配列を変更せずに新しい配列を作成できる
  • 関数の戻り値を利用できる
  • 複数の配列に対して操作できる

デメリット:

  • 新しい配列を作成するため、メモリ使用量が増える
  • キーへのアクセスが少し面倒

array_walk

メリット:

  • 元の配列を直接変更できるので、メモリ使用量を節約できる
  • キーと値の両方にアクセスできる
  • 参照渡しが可能なので、値を直接変更できる

デメリット:

  • 元の配列が変更されてしまう
  • 関数の戻り値を利用できない
  • 複数の配列に対する操作ができない

状況によってメリット・デメリットは変わってきますが、一般的には:

  • 配列の内容を変更する必要がなく、新しい配列が欲しい場合は array_map を使う
  • 配列の内容を変更する必要があり、メモリ使用量を気にする場合は array_walk を使う

ということになります。array_walkは副作用があるため、注意が必要です。読みやすさやメンテナンス性の点から、array_mapを使う方が安全といえます。

おわりに

今日は、array_mapとarray_walkの違いについて解説しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました