2

以下code does not work、予定通り。

$fruits = array('apple', 'orange', 'banana', 'cherry');

array_walk($fruits, function($a) {
        $a= ucfirst($a);
});

var_dump($fruits);

$fruits配列内の個々のエントリへの参照を渡すと、なぜこれが機能するのでしょうか。

array_walk(
    $fruits, 
    function(&$a) {
        $a = ucfirst($a);
    }
);

: 動作することはわかっarray_mapていますforeachが、動作しないのはなぜarray_walk()ですか?.

4

4 に答える 4

3

のコピーを関数に渡しfunction($a)ます。$a

関数への参照function(&$a)渡すと。このようにして、関数内から変更できます。$a$a

これが、array_walkよりメモリ効率が高い理由ですarray_map。追加の変数は必要ありません。新しく変更された配列を返す代わりに、元の各要素に関数を適用します。

関連する質問: array_map、array_walk、array_filter の違い

于 2013-10-30T19:25:45.447 に答える
2

コールバックが配列の実際の値を処理する必要がある場合は、コールバックの最初のパラメーターを参照として指定します。

ドキュメントによると:http://php.net/array_walk

于 2013-10-30T19:24:08.033 に答える
0

最初の例$aはローカル変数です。関数からの変更はすべて失われます。ちなみに、実配列への参照ポイントとそれを変更しますが、ローカルコピーは変更しません。

于 2013-10-30T19:24:36.910 に答える