Есть ли простой способ получить наивысшее числовое значение ассоциативного массива?
$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)
Пожалуйста, будьте добры, потому что этот вопрос был написан с телефона. Благодарю.
Если вы знаете, что ваши данные всегда будут в этом формате, что-то вроде этого должно работать.
function getMax( $array ) { $max = 0; foreach( $array as $k => $v ) { $max = max( array( $max, $v['key1'] ) ); } return $max; }
PHP 5.5 представил array_column()
что делает это намного проще:
echo max(array_column($array, 'key1'));
демонстрация
@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, когда числовых значений не найдено)
Этот пример вдохновлен примером, но вы можете установить ключ для поиска. Кроме того, он возвращает как минимальные, так и максимальные значения.
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); }