array_map、array_walk、array_filterの違い 質問する

array_map、array_walk、array_filterの違い 質問する

array_mapとの違いは正確には何でしょうかarray_walkarray_filterドキュメントから確認したところ、指定された配列に対してアクションを実行するためにコールバック関数を渡すことができるようです。しかし、それらの間に特別な違いは見当たりません。

これらは同じ機能を果たしますか?
互換的に使用できますか?

何か違いがある場合は、具体例を挙げて教えていただければ幸いです。

ベストアンサー1

  • 値の変更:
    • array_map入力配列内の値を変更することはできません。array_walkできる; 特に、array_map議論を変えることはありません。
  • 配列キーアクセス:
  • array_map配列キーでは操作できません。array_walkできる。
  • 戻り値:
  • array_map新しい配列を返します。array_walkは のみを返しますtrue。したがって、1つの配列を走査した結果として配列を作成したくない場合は、array_walk
  • 複数の配列を反復処理する:
  • array_map任意の数の配列を受け取ることもでき、それらを並列に反復処理することもできますが、array_walk1つだけ動作します。
  • 任意のデータをコールバックに渡す:
  • 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
)

おすすめ記事