¿Cómo obtener el primer elemento de una matriz PHP asociativa?
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?
reset()
le da el primer valor de la matriz si tiene un elemento dentro de la matriz:
$value = reset($array);
También te da FALSE
en caso de que la matriz esté vacía.
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 reset
y por lo tanto tiene efectos secundarios (restablece el puntero interno de la matriz), por lo que es posible que prefieras usarlo array_slice
para 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_slice
y 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_keys
requerirá 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_slice
duplicará ese primer objeto grande, mientras que array_keys
solo 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];
}
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";