Kar*_*arl 31 php max multidimensional-array
问题
我有一个类似于下面的多维数组.我想要实现的是一种从数组中查找和检索具有最高"Total"值的方法,现在我知道有一个被调用的函数,max
但这不适用于像这样的多维数组.
我想做的是创建一个foreach循环并构建一个只包含总数的新数组,然后使用max
查找最大值,这将起作用,唯一的问题是将检索与其相关的其余数据最大值.我不确定这是最有效的方式.
有任何想法吗?
Array
(
[0] => Array
(
[Key1] => Key1
[Total] => 13
)
[1] => Array
(
[Key2] => Key2
[Total] => 117
)
[2] => Array
(
[Key3] => Key3
[Total] => 39
)
)
Run Code Online (Sandbox Code Playgroud)
Bab*_*aba 26
只需做一个simple loop
并比较值或使用array_reduce
$data = array_reduce($data, function ($a, $b) {
return @$a['Total'] > $b['Total'] ? $a : $b ;
});
print_r($data);
Run Code Online (Sandbox Code Playgroud)
Rob*_*ert 11
这是如此基本的算法.
$max = -9999999; //will hold max val
$found_item = null; //will hold item with max val;
foreach($arr as $k=>$v)
{
if($v['Total']>$max)
{
$max = $v['Total'];
$found_item = $v;
}
}
echo "max value is $max";
print_r($found_item);
Run Code Online (Sandbox Code Playgroud)
我知道这个问题已经过时了,但我提供了以下答案,以回应标记为重复后指出的另一个问题.这是我在目前的答案中没有提到的另一种选择.
我知道有一个名为max的函数,但这不适用于像这样的多维数组.
你可以解决这个问题,array_column
这样可以很容易地获得最大值:
$arr = [['message_id' => 1,
'points' => 3],
['message_id' => 2,
'points' => 2],
['message_id' => 3,
'points' => 2]];
// max value
$max = max(array_column($arr, 'points'));
Run Code Online (Sandbox Code Playgroud)
考虑到你可能真的想要多个键(如果$max
匹配多个值),获取关联键是一个更棘手的地方.您可以array_map
使用内部的匿名函数执行此操作,并使用array_filter
以删除null
值:
// keys of max value
$keys = array_filter(array_map(function ($arr) use ($max) {
return $arr['points'] == $max ? $arr['message_id'] : null;
}, $arr));
Run Code Online (Sandbox Code Playgroud)
输出:
array(1) {
[0]=>
int(1)
}
Run Code Online (Sandbox Code Playgroud)
如果你最终得到多个键但只对找到的第一个匹配感兴趣,那么只需参考$keys[0]
.