найти max () определенного значения многомерного массива в php - PullRequest
3 голосов
/ 25 марта 2011

См. Массив, например: здесь

По сути, я хочу найти max () для массива [] ['time'] в этом массиве. Я могу понять это, если буду проходить через это, но я надеялся, что было более элегантное решение.

Ответы [ 3 ]

10 голосов
/ 25 марта 2011

Подумайте array_reduce, если вы хотите итеративно вычислять какое-то одно значение для массива:

$max = array_reduce($array, function($a, $b) { 
  return $a > $b['time'] ? $a : $b['time']; 
} );

Или вы можете использовать такую ​​служебную функцию, как:

function array_col(array $a, $x)
{
  return array_map(function($a) use ($x) { return $a[$x]; }, $a);
}

, котораябудет использоваться как:

$max = max(array_col($array, 'time'));

Это более общего назначения и может быть использовано для других подобных вещей.

1 голос
/ 25 марта 2011

Сортировка массива от наивысшего к наименьшему по []['time'] и получение первого значения:

function sort_arr($item_1, $item_2)
{
  return $item_2['time'] - $item_1['time'];
}

usort($arr, 'sort_arr');

// $arr[0] is the item with the highest time
0 голосов
/ 25 марта 2011

Вы всегда можете отсортировать массив и принять первое или последнее значение соответственно. Вы можете использовать usort для сортировки вашего массива, предоставляя пользовательскую функцию сравнения для отражения вашей структуры.

Вот простой пример:

$foo[1]["time"] = 2323443;
$foo[2]["time"] = 343435;
$foo[3]["time"] = 13455;
$foo[4]["time"] = 9873634;
$foo[5]["time"] = 82736;
$foo[6]["time"] = 9283;

function cmp($a, $b)
{
    if ($a["time"] == $b["time"]) {
        return 0;
    }
    return ($a["time"] < $b["time"]) 
        ? -1 
        : 1;
}

usort($foo, "cmp");

$max = $foo[count($foo)-1]["time"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...