ZetCode

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 的 array_reduce,通过实际示例展示了其在数组聚合和转换方面的多功能性。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 PHP 数组函数