В отличие от того, что опубликовали другие, вы не можете использовать функции min()
/ max()
для этой проблемы, так как эти функции не понимают структуру данных (массив), которая Эти функции работают только для элементов скалярного массива.
НАЧАТЬ РЕДАКТИРОВАТЬ
Причина, по которой использование min()
и max()
, по-видимому, дает правильный ответ, связана с приведением типов к целым числам, являющимся неопределенное поведение :
Поведение преобразования в целое число
не определено для других типов. Не делайте
полагаться на любое наблюдаемое поведение, так как оно
могут быть изменены без предварительного уведомления.
Мое утверждение выше о приведении типов было неверным. На самом деле min()
и max()
работают с массивами, но не так, как они нужны для работы OP. При использовании min()
и max()
с несколькими массивами или массивом элементов массив сравниваются элемент за элементом слева направо:
$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)
/*
* first element compared to first element: 2 == 2
* second element compared to second element: 4 < 5
* first array is considered the min and is returned
*/
В переводе на проблему ОП это показывает причину, по которой прямое использование min()
и max()
, кажется, дает правильный результат. Первыми элементами массивов являются id
-значения, поэтому min()
и max()
будут сравнивать их первыми, случайно получая правильный результат, поскольку самый низкий id
это самый низкий count
, а самый высокий id
тот, который имеет самый высокий count
.
END EDIT
Правильный способ - использовать цикл.
$a = array(
array('id' => 117, 'name' => 'Networking', 'count' => 16),
array('id' => 188, 'name' => 'FTP', 'count' => 23),
array('id' => 189, 'name' => 'Internet', 'count' => 48)
);
$min = PHP_INT_MAX;
$max = 0;
foreach ($a as $i) {
$min = min($min, $i['count']);
$max = max($max, $i['count']);
}