使用php以最佳方式计算多数组的键

时间:2017-10-19 11:44:24

标签: php arrays

我有以下数组(从php中的json解码):

array [
    array("num"=>1,"test"=123, "key"=4),
    array("num"=>2,"test"=123, "key"=3),
    array("num"=>3,"test"=124, "key"=2),
    array("num"=>4,"test"=125, "key"=7),
    array("num"=>5,"test"=125, "key"=8),
    array("num"=>6,"test"=123, "key"=5)
]

我想计算"测试"键并使用相同的键返回所有相关的数组: 123在数组中具有最多的外观

所以我想获得以下结果(最常出现的数组列表):

array[
   array("num1"=1 , "test"=123","key" = 4)    
   array("num1"=2 , "test"=123", "key" = 3)    
   array("num1"=6 , "test"=123" ,"key" = 5)    

]

然后(如果可能的话,当然可以在同一个循环中完成)从该列表开始,我想用最高的密钥:

   array("num1"=6 , "test"=123" ,"key" = 5)    

我怎么能以最好的方式在PHP中做到这一点? 非常感谢

1 个答案:

答案 0 :(得分:0)

这样的事情可能有用, 所有函数都在PHP.net上有很好的解释

<?php
$keyCounts = array_count_values( array_column( $arr, 'test' ));
$maxs = array_keys($arr, max($keyCounts ));
$filtered = array_filter($arr , function($row) { 
    return $row['test'] === $maxs; 
});
$filteredMax = max(array_column( $filtered , 'key' );
$final  = array_filter($filtered  , function($row) { 
    return $row['key'] === $filteredMax; 
});

编辑: 这段代码不太可能有效,但它应该指向正确的方向和正确的函数来自己找到正确的解决方案。