PHP array_walk_recursive 函数
最后修改于 2025 年 3 月 13 日
PHP array_walk_recursive
函数将用户定义的函数递归地应用于数组的每个元素。它对嵌套数组很有用。
基本定义
array_walk_recursive
递归地处理数组,将回调函数应用于每个非数组元素。它在遍历过程中保留数组键。
语法: array_walk_recursive(array &$array, callable $callback, mixed $userdata = null): bool
。回调函数接收值和键参数。
基本 array_walk_recursive 示例
此示例演示如何打印嵌套数组结构中的所有值。
basic_array_walk_recursive.php
<?php declare(strict_types=1); $data = [ 'name' => 'John', 'contacts' => [ 'email' => 'john@example.com', 'phone' => '123456789' ], 'age' => 30 ]; array_walk_recursive($data, function($value, $key) { echo "$key: $value\n"; });
回调函数接收每个键值对。嵌套数组被递归处理,但它们的父键不会传递给回调函数。
修改数组值
此示例展示了如何使用引用就地修改数组值。
modify_values.php
<?php declare(strict_types=1); $numbers = [ 'a' => 1, 'b' => [2, 3], 'c' => 4 ]; array_walk_recursive($numbers, function(&$value, $key) { $value *= 2; }); print_r($numbers);
通过按引用传递值 (&$value),我们可以修改原始数组元素。在此示例中,所有数值都被加倍。
使用用户数据参数
第三个参数允许将附加数据传递给回调函数。
user_data.php
<?php declare(strict_types=1); $products = [ 'item1' => ['price' => 100, 'quantity' => 2], 'item2' => ['price' => 200, 'quantity' => 1] ]; $discount = 0.1; // 10% discount array_walk_recursive($products, function(&$value, $key, $discount) { if ($key === 'price') { $value *= (1 - $discount); } }, $discount); print_r($products);
折扣值作为用户数据传递,并且仅应用于价格字段。这演示了基于键和用户数据的选择性修改。
计算数组元素
此示例计算多维数组中的所有非数组元素。
counting_elements.php
<?php declare(strict_types=1); $data = [ 'a' => 1, 'b' => [2, 3, [4, 5]], 'c' => 6 ]; $count = 0; array_walk_recursive($data, function($value) use (&$count) { $count++; }); echo "Total elements: $count";
使用闭包进行变量绑定,我们为每个非数组元素递增一个计数器。结果显示了叶节点的总数。
构建扁平数组
此示例将嵌套数组中的所有值收集到一个扁平数组中。
flatten_array.php
<?php declare(strict_types=1); $nested = [ 'a' => 1, 'b' => [ 'c' => 2, 'd' => [3, 4] ], 'e' => 5 ]; $flat = []; array_walk_recursive($nested, function($value) use (&$flat) { $flat[] = $value; }); print_r($flat);
通过将每个值追加到外部数组,我们创建了一个扁平化的版本。当您需要统一处理所有值时,此技术非常有用。
最佳实践
- 引用参数: 使用 &$value 修改数组元素。
- 键的意识: 当需要条件逻辑时,检查 $key。
- 用户数据: 通过第三个参数传递附加数据。
- 闭包: 使用 'use' 关键字访问外部变量。
- 性能: 避免在大型数组中执行复杂操作。
来源
本教程介绍了 PHP array_walk_recursive
函数,并通过实际示例展示了其在处理嵌套数组结构中的用法。
作者
列出 所有 PHP 数组函数。