在 PHP 中,array_walk() 与 array_map() 这两个数组处理函数有何不同?请分别给出它们各自的适用场景。
考察说明
考查对 PHP 数组处理函数 array_walk 与 array_map 在行为、参数传递、返回值及典型用法上的辨析能力。
回答思路
- 【回答框架 1】array_walk 直接操作原数组,对每个元素调用回调,回调接收值及可选键,并可传附加参数,返回布尔值表示成功与否,通常用于修改或遍历数组元素。
- 【回答框架 2】array_map 将回调应用于每个元素后返回新数组,默认只传值,可用多个数组参数实现多数组并行处理,若传多个数组,回调参数个数需匹配,原数组保持不变。
- 【回答框架 3】场景上,需原地修改数组、要处理键或额外参数时选 array_walk;需生成转换后的新数组、不改变原数组或需同时处理多个数组取对应元素时选 array_map。
- 【回答框架 4】性能方面两者差异不大,关键看需求是副作用还是纯变换,选择不当可能造成意图不清晰或误写原数组数据。
- 【回答框架 5】callback 对元素个数期待不同:array_map 回调参数数量应等于传入数组数量,array_walk 最多两个参数(值和键)。
- 【关键点 1】array_walk 返回布尔值并直接操作原数组,array_map 返回新数组且不修改原数组。
- 【关键点 2】array_map 支持多个数组参数并行处理,array_walk 主要用于单数组遍历并支持键。
- 【关键点 3】需要修改原数组元素时用 array_walk,需要生成新数组或组合多个数组时用 array_map。
- 【易错点 1】误以为 array_map 会修改原数组,实际它返回新数组,原数组不变。
- 【易错点 2】array_map 使用多个数组时回调参数数量与数组数量不匹配会报错,需注意。
- 【易错点 3】array_walk 回调内若需修改元素值,必须通过引用传递参数,否则修改无效。