¿Cómo obtener el primer elemento de una matriz PHP asociativa?

Resuelto Ali asked hace 54 años • 16 respuestas

Si tuviera una matriz como:

$array['foo'] = 400;
$array['bar'] = 'xyz';

Y quería obtener el primer elemento de esa matriz sin conocer la clave, ¿cómo haría eso? ¿Existe una función para esto?

Ali avatar Jan 01 '70 08:01 Ali
Aceptado

reset()le da el primer valor de la matriz si tiene un elemento dentro de la matriz:

$value = reset($array);

También te da FALSEen caso de que la matriz esté vacía.

soulmerge avatar Oct 24 '2009 06:10 soulmerge

PHP<7.3

Si no sabe lo suficiente sobre la matriz (no está seguro de si la primera clave es foo o bar ), entonces la matriz también podría estar, tal vez, vacía .

Por lo tanto, sería mejor verificarlo, especialmente si existe la posibilidad de que el valor devuelto sea el booleano FALSO:

$value = empty($arr) ? $default : reset($arr);

El código anterior usa resety por lo tanto tiene efectos secundarios (restablece el puntero interno de la matriz), por lo que es posible que prefieras usarlo array_slicepara acceder rápidamente a una copia del primer elemento de la matriz:

$value = $default;
foreach(array_slice($arr, 0, 1) as $value);

Suponiendo que desea obtener la clave y el valor por separado , debe agregar el cuarto parámetro a array_slice:

foreach(array_slice($arr, 0, 1, true) as $key => $value);

Para obtener el primer elemento como par ( key => value):

$item = array_slice($arr, 0, 1, true);

Modificación simple para obtener el último elemento, clave y valor por separado:

foreach(array_slice($arr, -1, 1, true) as $key => $value);

actuación

Si la matriz no es realmente grande, en realidad no la necesita array_slicey puede obtener una copia de toda la matriz de claves y luego obtener el primer elemento:

$key = count($arr) ? array_keys($arr)[0] : null;

Sin embargo, si tiene una matriz muy grande, la llamada a array_keysrequerirá mucho tiempo y más memoria array_slice(ambas funciones recorren la matriz, pero esta última termina tan pronto como ha reunido la cantidad requerida de elementos, que es uno).

Una excepción notable es cuando tienes la primera clave que apunta a un objeto muy grande y complicado. En ese caso array_sliceduplicará ese primer objeto grande, mientras que array_keyssolo tomará las llaves.

PHP 7.3+

PHP 7.3 en adelante implementa array_key_first()además de array_key_last(). Estos se proporcionan explícitamente para acceder a la primera y última clave de manera eficiente sin restablecer el estado interno de la matriz como efecto secundario.

Entonces, desde PHP 7.3 se puede acceder al primer valor de con$array

$array[array_key_first($array)];

Aún así será mejor que verifiques que la matriz no esté vacía, o recibirás un error:

$firstKey = array_key_first($array);
if (null === $firstKey) {
    $value = "Array is empty"; // An error should be handled here
} else {
    $value = $array[$firstKey];
}
LSerni avatar Sep 27 '2017 09:09 LSerni

Bucle falso que se rompe en la primera iteración:

$key = $value = NULL;
foreach ($array as $key => $value) {
    break;
}

echo "$key = $value\n";

O use each()( advertencia: obsoleto a partir de PHP 7.2.0 ):

reset($array);
list($key, $value) = each($array);

echo "$key = $value\n";
John Kugelman avatar Oct 24 '2009 06:10 John Kugelman