第5章 組み込み関数 / 第5回 模擬試験
PHPの`array_walk()`関数に関する次の記述のうち、正しいものはどれか。
`array_walk()`は配列の各要素に対してコールバック関数を適用するが、通常は元の配列を変更するために使う。
正解
`array_walk()`は新しい配列を生成し、元の配列には一切影響を与えない関数である。
`array_walk()`は配列の要素数を数える関数である。
`array_walk()`はコールバック関数を受け取ることができない。
解説
`array_walk($array, $callback)`は、配列の各要素にコールバック関数を適用する関数です。コールバックの第1引数を参照渡し(`&$value`)で受け取るようにすると、コールバック内での変更が元の配列にそのまま反映されるため、既存の配列の各要素を一括で書き換える目的でよく使われます。
他の選択肢が誤りである理由は次の通りです。
・`array_walk()`はコールバックの書き方次第で元の配列を直接変更できる関数です。「新しい配列を生成し、元の配列には一切影響を与えない」という記述は、この関数の主な使い方とは逆です(新しい配列を作りたい場合は`array_map()`の方が適しています)。
・配列の要素数を数える関数は`count()`です。
・`array_walk()`は第2引数として必ずコールバック関数を受け取ります。「受け取ることができない」は誤りです。
例:
```
$nums = [1, 2, 3];
array_walk($nums, function (&$value) {
$value *= 10;
});
print_r($nums); // [10, 20, 30](元の配列が書き換わる)
```
(参照: 独習PHP 第4版 第5章 組み込み関数 5.3.12節 array_walk関数 p.206〜207)