ZetCode

PHP array_walk 函数

最后修改于 2025 年 3 月 13 日

PHP 的 array_walk 函数将用户定义的callback(回调函数)应用于数组的每个元素。它对于处理数组元素而无需创建新数组非常有用。

基本定义

array_walk 函数遍历每个数组元素并对其应用回调函数。原始数组通过引用被修改。

语法:array_walk(array &$array, callable $callback, mixed $userdata = null): bool。回调函数默认接收值和键。成功时返回 true。

基本 array_walk 示例

这演示了通过对数字求平方来修改数组中的每个元素。

basic_array_walk.php
<?php

$numbers = [1, 2, 3, 4];

function square(&$value, $key) {
    $value = $value * $value;
}

array_walk($numbers, 'square');

print_r($numbers);

回调函数通过引用修改每个元素。原始数组被更改为包含平方值。注意回调函数中 $value 前面的 &。

使用 array_walk 与键

此示例展示了如何在回调函数中访问键和值。

array_walk_keys.php
<?php

$fruits = [
    'a' => 'apple',
    'b' => 'banana',
    'c' => 'cherry'
];

function printPair($value, $key) {
    echo "$key: $value\n";
}

array_walk($fruits, 'printPair');

回调函数接收键和值参数。这允许处理键有意义的关联数组。输出显示每个键值对。

使用用户数据与 array_walk

第三个参数允许将额外数据传递给回调函数。

array_walk_userdata.php
<?php

$prices = [10, 20, 30];
$discount = 0.2; // 20% discount

function applyDiscount(&$price, $key, $discount) {
    $price = $price * (1 - $discount);
}

array_walk($prices, 'applyDiscount', $discount);

print_r($prices);

折扣率作为用户数据传递。回调函数将此折扣应用于每个价格。这演示了如何在所有回调调用中共享数据。

通过引用修改数组元素

此示例演示了如何在回调函数中直接修改数组元素。

array_walk_reference.php
<?php

$names = ['alice', 'bob', 'charlie'];

function capitalize(&$name) {
    $name = ucfirst($name);
}

array_walk($names, 'capitalize');

print_r($names);

回调函数通过引用修改值来将每个名称大写。在 array_walk 执行后,原始数组将使用大写名称进行更新。

使用匿名函数与 array_walk

现代 PHP 允许使用匿名函数来获得更简洁的代码。

array_walk_anonymous.php
<?php

$temperatures = [22.5, 19.3, 25.1, 18.7];

array_walk($temperatures, function(&$temp) {
    $temp = round($temp);
});

print_r($temperatures);

匿名函数对每个温度进行四舍五入。这种方法使逻辑靠近使用它的地方,从而提高了简单操作的代码可读性。

最佳实践

来源

PHP array_walk 文档

本教程介绍了 PHP array_walk 函数,并提供了实际示例,展示了它在数组处理场景中的用法。

作者

我叫 Jan Bodnar,是一位热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 PHP 数组函数