Найти и отследить максимальное значение в многомерном массиве - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть многомерный массив, который выглядит так:

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 и т. Д.

Я мог бы сделать это с помощью нескольких циклов, но искал более элегантное решение.

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

Вот еще один.Хотя я не уверен, элегантно ли это.

$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);

РЕДАКТ.

1 голос
/ 10 февраля 2012

Это самое элегантное решение, которое я могу придумать:

$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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...