array_map
との違いは正確には何でしょうかarray_walk
。array_filter
ドキュメントから確認したところ、指定された配列に対してアクションを実行するためにコールバック関数を渡すことができるようです。しかし、それらの間に特別な違いは見当たりません。
これらは同じ機能を果たしますか?
互換的に使用できますか?
何か違いがある場合は、具体例を挙げて教えていただければ幸いです。
ベストアンサー1
- 値の変更:
array_map
入力配列内の値を変更することはできません。array_walk
できる; 特に、array_map
議論を変えることはありません。
- 配列キーアクセス:
array_map
配列キーでは操作できません。array_walk
できる。- 戻り値:
array_map
新しい配列を返します。array_walk
は のみを返しますtrue
。したがって、1つの配列を走査した結果として配列を作成したくない場合は、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
)