我有一个多维数组,如下所示:
Array
(
[0] => Array
(
[id] => 2280764150
[label] => Some Label A
[pda] => 5.34
[prt] => 67
[kps] => 12436
[xmv] => 1.24
)
[1] => Array
(
[id] => 2273499083
[label] => Some Label B
[pda] => 2.99
[prt] => 97
[kps] => 212436
[xmv] => 7.78
)
[2] => Array
(
[id] => 2273045947
[label] => Some Label C
[pda] => 6.34
[prt] => 157
[kps] => 1436
[xmv] => 2.34
)
)
我想要做的是找出哪个数组元素具有每个项pda
prt
kps
和xmv
的最大值。我不想知道最大值是什么,但我想知道哪一个具有最大元素。因此,Some Label C
会被记录为最大pda
,Some Label B
具有kps
的最大值,依此类推。
我可以通过一些循环来做到这一点,但是正在寻找更优雅的解决方案。
答案 0 :(得分:2)
这是另一个。不过,我不确定它是否优雅。
$arr = array(
array('id'=>2280764150,'label'=>'Some Label A','pda'=>5.34,'prt'=>67,'kps'=>12436,'xmv'=>1.24),
array('id'=>2273499083,'label'=>'Some Label B','pda'=>2.99,'prt'=>97,'kps'=>212436,'xmv'=>7.78),
array('id'=>2273045947,'label'=>'Some Label C','pda'=>6.34,'prt'=>157,'kps'=>1436,'xmv'=>2.34),
);
$max = array('pda'=>0,'prt'=>0,'kps'=>0);
foreach (array_keys($max) as $key) {
array_walk($arr,'get_max',$key);
}
function get_max($inner_arr,$index,$key) {
global $max;
if ($inner_arr[$key] > $max[$key]['max'])
$max[$key] = array('index'=>$index,'max'=>$inner_arr[$key]);
}
print_r($max);
编辑:上面的代码缩短
$max = array('pda'=>0,'prt'=>0,'kps'=>0);
array_walk($arr,'get_max');
function get_max($inner_arr,$index) {
global $max;
foreach (array_keys($max) as $key) {
if ($inner_arr[$key] > $max[$key]['max'])
$max[$key] = array('index'=>$index,'max'=>$inner_arr[$key]);
}
}
答案 1 :(得分:1)
这是我能想到的最优雅的解决方案:
$max=Array();
foreach ($yourArray as $key=>$nestedArray) {
foreach ($nestedArray as $item => $val) {
if (!isset($max[$item]) || $max[$item]['val']<$val) {
$max[$item]['val']=$val;
$max[$item]['key']=$key;
}
}
}