2011-02-23 18 views
9

¿Hay alguna manera fácil de obtener el valor numérico más alto de una matriz asociativa?Valor más alto de una matriz asociativa

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

Tenga en cuenta que esta pregunta fue escrita con un teléfono. Gracias.

Respuesta

12

Si sabe que sus datos siempre estarán en ese formato, algo como esto debería funcionar.

function getMax($array) 
{ 
    $max = 0; 
    foreach($array as $k => $v) 
    { 
     $max = max(array($max, $v['key1'])); 
    } 
    return $max; 
} 
+2

Tendría que modificarlo un poco para aceptar la segunda variable y devolver la clave de matriz en lugar del valor máximo. – jeroen

+0

+1 esto debería funcionar bien. Incluso puede pasar '' key1'' como parámetro para hacerlo más dinámico. –

1

@ithcy - extensión a que funciona con cualquier matriz de tamaño

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; 
} 

Creo (devuelve false cuando no hay valores numéricos son encontrados)

11

PHP 5.5 introducidas array_column() cuales hace esto mucho más simple:

echo max(array_column($array, 'key1')); 

Demo

0

Esta está inspirada en el ejemplo de ithcy, pero puede establecer la clave para buscar. Además, devuelve los valores mínimo y máximo.

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); 
} 
+0

¿Por qué utilizar un bucle cuando puede usar una función PHP incorporada? –

Cuestiones relacionadas