找到并且;跟踪多维数组中的最大值

时间:2012-02-09 23:25:04

标签: php php-5.3

我有一个多维数组,如下所示:

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 kpsxmv的最大值。我不想知道最大值是什么,但我想知道哪一个具有最大元素。因此,Some Label C会被记录为最大pdaSome Label B具有kps的最大值,依此类推。

我可以通过一些循环来做到这一点,但是正在寻找更优雅的解决方案。

2 个答案:

答案 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;
        }
    }
}