Наибольшее значение ассоциативного массива
Есть ли простой способ получить самое высокое числовое значение ассоциативного массива?
$array = array(
0 => array(
'key1' => '123',
'key2' => 'values we',
'key3' => 'do not',
'key4' => 'care about'
),
1 => array(
'key1' => '124',
'key2' => 'values we',
'key3' => 'do not',
'key4' => 'care about'
),
2 => array(
'key1' => '125',
'key2' => 'values we',
'key3' => 'do not',
'key4' => 'care about'
)
);
AwesomeFunction($array, 'key1'); // returns 2 ($array key)
Пожалуйста, будьте добры, потому что этот вопрос был написан с телефона. Спасибо.
Ответы
Ответ 1
Если вы знаете, что ваши данные всегда будут в этом формате, что-то вроде этого должно работать.
function getMax( $array )
{
$max = 0;
foreach( $array as $k => $v )
{
$max = max( array( $max, $v['key1'] ) );
}
return $max;
}
Ответ 2
В PHP 5.5 введена array_column()
которая делает это намного проще:
echo max(array_column($array, 'key1'));
демонстрация
Ответ 3
@ithcy - расширение к нему будет работать с любым размером массива
function getMax($array) {
if (is_array($array)) {
$max = false;
foreach($array as $val) {
if (is_array($val)) $val = getMax($val);
if (($max===false || $val>$max) && is_numeric($val)) $max = $val;
}
} else return is_numeric($array)?$array:false;
return $max;
}
Я думаю
(возвращает false, когда числовых значений не найдено)
Ответ 4
Этот пример вдохновлен примером ithcy, но вы можете установить ключ для поиска.
Кроме того, он возвращает как минимальные, так и максимальные значения.
function getArrayLimits( $array, $key ) {
$max = -PHP_INT_MAX;
$min = PHP_INT_MAX;
foreach( $array as $k => $v ) {
$max = max( $max, $v[$key] );
$min = min( $min, $v[$key] );
}
return Array('min'=>$min,'max'=>$max);
}