1. ホーム
  2. php

[解決済み] array_map、array_walk、array_filterの違いについて

2022-03-24 13:15:14

質問

とは、具体的にどのような違いがあるのでしょうか。 array_map , array_walkarray_filter . ドキュメントから分かったことは、与えられた配列に対してアクションを実行するために、コールバック関数を渡すことができるということです。しかし、私はそれらの間に特別な違いを見つけることができないようです。

この2つは同じことを実行するのですか?
交換可能ですか?

全く違うのであれば、説明的な例でご教示いただければと思います。

どのように解決するのですか?

  • 値を変更する。
  • Array Keysへのアクセス。
  • 戻り値
    • array_map は新しい配列を返します。 array_walk を返すだけです。 true . したがって、ある配列を走査した結果、その配列が作成されないようにするには array_walk .
  • 複数の配列をイテレートする。
    • array_map は,任意の数の配列を受け取ることができ,それらを並列に反復処理することができます. array_walk は1つだけを操作します。
  • コールバックに任意のデータを渡す。
    • array_walk は、コールバックに渡す追加の任意のパラメータを受け取ることができます。これは、PHP 5.3 以降ではほとんど関係ありません (この時点で 匿名関数 が導入されました)。
  • 返された配列の長さ。
    • の配列が生成されます。 array_map は、最大の入力配列の長さと同じになります。 array_walk は配列を返しませんが、同時に元の配列の要素数を変更することはできません。 array_filter は、フィルタリング関数に従って配列の要素の一部だけを選びます。キーは保持されます。

<pre>
<?php

$origarray1 = array(2.4, 2.6, 3.5);
$origarray2 = array(2.4, 2.6, 3.5);

print_r(array_map('floor', $origarray1)); // $origarray1 stays the same

// changes $origarray2
array_walk($origarray2, function (&$v, $k) { $v = floor($v); }); 
print_r($origarray2);

// this is a more proper use of array_walk
array_walk($origarray1, function ($v, $k) { echo "$k => $v", "\n"; });

// array_map accepts several arrays
print_r(
    array_map(function ($a, $b) { return $a * $b; }, $origarray1, $origarray2)
);

// select only elements that are > 2.5
print_r(
    array_filter($origarray1, function ($a) { return $a > 2.5; })
);

?>
</pre>

結果

Array
(
    [0] => 2
    [1] => 2
    [2] => 3
)
Array
(
    [0] => 2
    [1] => 2
    [2] => 3
)
0 => 2.4
1 => 2.6
2 => 3.5
Array
(
    [0] => 4.8
    [1] => 5.2
    [2] => 10.5
)
Array
(
    [1] => 2.6
    [2] => 3.5
)