[解決済み] array_map、array_walk、array_filterの違いについて
2022-03-24 13:15:14
質問
とは、具体的にどのような違いがあるのでしょうか。
array_map
,
array_walk
と
array_filter
. ドキュメントから分かったことは、与えられた配列に対してアクションを実行するために、コールバック関数を渡すことができるということです。しかし、私はそれらの間に特別な違いを見つけることができないようです。
この2つは同じことを実行するのですか?
交換可能ですか?
全く違うのであれば、説明的な例でご教示いただければと思います。
どのように解決するのですか?
-
値を変更する。
-
array_map
は入力配列の値を変更できませんがarray_walk
ができます。特にarray_map
はその引数を決して変更しない。
-
-
Array Keysへのアクセス。
-
array_map
は配列のキーで操作できません。array_walk
ができます。
-
-
戻り値
-
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
)
関連
-
[解決済み】不明なMySQLサーバーのホスト
-
[解決済み】 PHP 未定義関数の呼び出し
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] require, include, require_once, include_onceの違い?
-
[解決済み] JavaScriptで2つの配列の差を取得する方法は?
-
[解決済み] パブリック、プライベート、プロテクトの違いは何ですか?
-
[解決済み] JavaScriptの配列宣言で「Array()」と「[]」はどう違うのですか?
-
[解決済み] PHPの文字列で、シングルクオートとダブルクオートの違いは何ですか?
-
[解決済み] ( for... in ) と ( for... of ) の文の違いは何ですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PHP定数「PHP_EOL」はいつ使うの?
-
[解決済み】「セッションキャッシュリミッターを送信できません - ヘッダーはすでに送信されています」【重複】。
-
[解決済み] php5パッケージのインストール候補がない (Ubuntu 16.04)
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み】未定義のメソッド mysqli_stmt::get_result を呼び出す。
-
[解決済み】PHP フェイタルエラー。未定義の関数mssql_connect()をコールしています。
-
[解決済み】Netbeans 7.4 for PHPで「スーパーグローバルな$_POST配列に直接アクセスしないでください」という警告が発生する。
-
phpのAllowed memory size of 134217728 bytes枯渇問題の解決法
-
MacでPHPを実行した際に、メモリサイズが134217728バイトも消費される問題の解決方法について
-
[解決済み] PHPの配列を別の配列にコピーする関数はありますか?