PHP array_reduce 函数
最后修改于 2025 年 3 月 13 日
PHP 的 array_reduce 函数使用回调函数迭代地将数组归约到单个值。它对于聚合非常强大。
基本定义
array_reduce 函数按顺序处理数组元素。它应用一个回调来将元素组合成一个单一的累积结果。
语法:array_reduce(array $array, callable $callback, mixed $initial = null): mixed。回调函数接收累加器(carry)和当前项的值。
对数组元素求和
此示例演示如何使用归约对数组中的所有元素求和。
sum_array.php
<?php
declare(strict_types=1);
$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, function($carry, $item) {
return $carry + $item;
}, 0);
echo "The sum is: $sum";
回调函数将每个元素添加到累积的总和中。我们从 0 作为初始值开始。结果是所有数组元素的总和。
连接字符串
归约可以将数组元素与分隔符组合成一个单一的字符串。
concat_strings.php
<?php
declare(strict_types=1);
$words = ["Hello", "world", "from", "PHP"];
$sentence = array_reduce($words, function($carry, $item) {
return $carry ? "$carry $item" : $item;
}, "");
echo $sentence;
这通过用空格连接单词来构建一个句子。初始的空字符串防止了前导空格。每次迭代都会添加下一个单词。
查找最大值
使用 array_reduce 实现一个 max 函数来查找最大值。
find_max.php
<?php
declare(strict_types=1);
$numbers = [42, 17, 89, 23, 56];
$max = array_reduce($numbers, function($carry, $item) {
return $item > $carry ? $item : $carry;
}, PHP_INT_MIN);
echo "Maximum value: $max";
回调函数将每个元素与当前最大值进行比较。我们从最小的可能整数开始。结果是数组中的最大元素。
展平嵌套数组
使用 array_reduce 将二维数组展平为一维。
flatten_array.php
<?php
declare(strict_types=1);
$matrix = [[1, 2], [3, 4], [5, 6]];
$flat = array_reduce($matrix, function($carry, $item) {
return array_merge($carry, $item);
}, []);
print_r($flat);
这会将所有子数组合并为一个。我们从一个空数组开始。每次迭代都会将当前子数组与累积结果合并。
计算出现次数
使用归约计算值在数组中出现的次数。
count_occurrences.php
<?php
declare(strict_types=1);
$fruits = ["apple", "banana", "apple", "orange", "banana", "apple"];
$counts = array_reduce($fruits, function($carry, $item) {
$carry[$item] = ($carry[$item] ?? 0) + 1;
return $carry;
}, []);
print_r($counts);
这会构建一个关联数组来计算每种水果的出现次数。null 合并运算符处理第一次出现。结果显示每种水果的计数。
最佳实践
- 初始值:始终提供有意义的初始值。
- 类型一致性:确保回调函数的返回值与初始值类型匹配。
- 性能:对于大型数组,请考虑更简单的循环。
- 可读性:对于复杂的逻辑,请使用命名函数。
- 错误处理:在归约之前验证数组内容。
来源
本教程介绍了 PHP 的 array_reduce,通过实际示例展示了其在数组聚合和转换方面的多功能性。
作者
列出 所有 PHP 数组函数。