在多维数组中查找最高值

2022-08-30 12:18:59

问题

我有一个类似于下面的多维数组。我试图实现的是一种从数组中查找和检索具有最高“Total”值的函数的方法,现在我知道有一个名为函数,但不适用于像这样的多维数组。max

我想做的是创建一个foreach循环并构建一个仅包含总数的新数组,然后用于查找最大值,这将起作用,唯一的问题是检索与该最大值相关的其余数据。我也不确定这是最有效的方法。max

有什么想法吗?

Array
(
    [0] => Array
        (
            [Key1] => Key1
            [Total] => 13
        )

    [1] => Array
        (
            [Key2] => Key2
            [Total] => 117
        )

    [2] => Array
        (
            [Key3] => Key3
            [Total] => 39
        )
)

答案 1

从 PHP 5.5 开始,您可以使用 array_column 来获取特定键的值数组,并最大化它。

max(array_column($array, 'Total'))


答案 2

只需做一个并比较值或使用. 是一个误差抑制器;它隐藏了在第一次迭代中访问之前未声明的事实。演示simple looparray_reduce@$a['total']

$data = array_reduce($data, function ($a, $b) {
    return @$a['Total'] > $b['Total'] ? $a : $b ;
});

print_r($data);
// Array( [Key2] => Key2 [Total] => 117 )

它也可以使用箭头函数语法编写,该语法自PHP7.4以来一直可用。演示

var_export(
    array_reduce(
        $data,
        fn($result, $row) =>
            $result['Total'] > $row['Total']
            ? $result
            : $row,
        ['Key1' => null, 'Total' => PHP_INT_MIN]
    )
);
// array ('Key2' => 'Key2', 'Total' => 117,)

推荐