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 vacía .
Por lo tanto, sería mejor verificar, 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 tiene efectos secundarios (restablece el puntero interno de la matriz), por lo que puede preferir usar array_slicepara acceder rápidamente a una copia del primer elemento de la matriz:
Si la matriz no es realmente grande, en realidad no necesita array_slicey puede obtener una copia de toda la matriz de claves, luego obtenga 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 memoria array_slice(ambas funciones recorren la matriz, pero la última termina tan pronto como ha reunido el número requerido de elementos, que es uno).
Una excepción notable es cuando tiene la primera clave que apunta a un objeto muy grande y complicado. En ese caso array_slice, duplicará ese primer objeto grande, mientras array_keysque solo tomará las teclas.
PHP 7.3
PHP 7.3 implementa array_key_first()tan bien como array_key_last(). Estos se proporcionan explícitamente para acceder a las primeras y últimas teclas de manera eficiente sin restablecer el estado interno de la matriz como efecto secundario.
Entonces en PHP 7.3 se puede acceder al primer valor de $arraycon
$array[array_key_first($array)];
Sin embargo, es mejor que compruebe que la matriz no está vacía, o obtendrá un error:
$firstKey = array_key_first($array);if(null=== $firstKey){
$value ="Array is empty";// An error should be handled here}else{
$value = $array[$firstKey];}
@AhmedShefeer, la otra respuesta no es solo la aceptada, sino que ha estado allí durante ocho años más . Estoy recogiendo las migajas aquí :-D. Pero gracias por el voto de confianza!
LSerni
1
Me parece que esta es la mejor respuesta, ya que la única otra no desaprobada que da tanto la clave como el valor es el bucle foreach abortado, que es incómodo. Las otras respuestas dan solo el valor sin la clave.
hollín
1
Me encantó este enfoque moderno y actualizado con el tiempo.
sanjeet bisht
@LSerni No sé si todavía está activo, pero estaba atascado y esta publicación bien explicada y actualizada me salvó. Gracias
Porque la solución está en su primera línea de código pero continúa escribiendo otra línea completamente innecesaria.
markus
21
reset no devolverá la clave
HarryFink
3
+1 para el 'bucle falso'. He necesitado recuperar los primeros elementos clave y valor, sin pasar por cada elemento. La reset()función solo recuperaría el primer valor.
Phil Cross
2
+1 para el bucle falso también, necesito mantener la clave para que reiniciar no sea una opción
isJustMe
25
Hay algunas opciones array_shift()devolverá el primer elemento, pero también eliminará el primer elemento de la matriz.
$first = array_shift($array);
current() devolverá el valor de la matriz a la que apunta su puntero de memoria interna, que es el primer elemento por defecto.
$first = current($array);
Si desea asegurarse de que apunta al primer elemento, siempre puede usarlo reset().
Me gusta esta respuesta como la más completa, pero note en reset()realidad devuelve el elemento, por lo que seguir con a $first = current($array)es redundante.
Tom Auger
9
Solo para que tengamos algunas otras opciones: reset($arr);lo suficientemente bueno si no está tratando de mantener el puntero de la matriz en su lugar, y con matrices muy grandes incurre en una cantidad mínima de sobrecarga. Dicho esto, hay algunos problemas con esto:
reset()es una opción mucho mejor ya que devuelve falso si la matriz está vacía. su solución no funcionará, por ejemplo, en la pregunta
Northys
1
En PHP 7+, algo como esto funcionaría:array_values($array)[0] ?? FALSE
MarthyM
4
Pruebe si la variable es una matriz antes de obtener el primer elemento. Al crear dinámicamente la matriz si está configurada como nula, se obtiene un error.
Esto solo funciona cuando el puntero interno está en el primer elemento. Si bien esto es bueno porque no restablece la posición del puntero, solo funciona cuando el puntero ya está en reposo.
cjc
1
Comenzando con PHP 7.3.0 , es posible hacerlo sin restablecer el puntero interno. Se podría utilizar array_key_first. Si está seguro de que su matriz tiene valores, puede hacer lo siguiente:
$first = $array[array_key_first($array)];
Lo más probable es que desee manejar el caso donde la matriz está vacía:
Respuestas:
reset()
le da el primer valor de la matriz si tiene un elemento dentro de la matriz:También te da
FALSE
en caso de que la matriz esté vacía.fuente
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
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 vacía .
Por lo tanto, sería mejor verificar, especialmente si existe la posibilidad de que el valor devuelto sea el booleano FALSO:
El código anterior usa
reset
y tiene efectos secundarios (restablece el puntero interno de la matriz), por lo que puede preferir usararray_slice
para acceder rápidamente a una copia del primer elemento de la matriz:Suponiendo que desea obtener tanto la clave como el valor por separado , debe agregar el cuarto parámetro a
array_slice
:Para obtener el primer elemento como un par (
key => value
):Modificación simple para obtener el último elemento, clave y valor por separado:
actuación
Si la matriz no es realmente grande, en realidad no necesita
array_slice
y puede obtener una copia de toda la matriz de claves, luego obtenga el primer elemento:Sin embargo, si tiene una matriz muy grande, la llamada a
array_keys
requerirá mucho tiempo y memoriaarray_slice
(ambas funciones recorren la matriz, pero la última termina tan pronto como ha reunido el número requerido de elementos, que es uno).Una excepción notable es cuando tiene la primera clave que apunta a un objeto muy grande y complicado. En ese caso
array_slice
, duplicará ese primer objeto grande, mientrasarray_keys
que solo tomará las teclas.PHP 7.3
PHP 7.3 implementa
array_key_first()
tan bien comoarray_key_last()
. Estos se proporcionan explícitamente para acceder a las primeras y últimas teclas de manera eficiente sin restablecer el estado interno de la matriz como efecto secundario.Entonces en PHP 7.3 se puede acceder al primer valor de
$array
conSin embargo, es mejor que compruebe que la matriz no está vacía, o obtendrá un error:
fuente
Fake loop que se rompe en la primera iteración:
O use
each()
( advertencia: en desuso a partir de PHP 7.2.0 ):fuente
reset()
función solo recuperaría el primer valor.Hay algunas opciones
array_shift()
devolverá el primer elemento, pero también eliminará el primer elemento de la matriz.current()
devolverá el valor de la matriz a la que apunta su puntero de memoria interna, que es el primer elemento por defecto.Si desea asegurarse de que apunta al primer elemento, siempre puede usarlo
reset()
.fuente
reset()
realidad devuelve el elemento, por lo que seguir con a$first = current($array)
es redundante.Solo para que tengamos algunas otras opciones:
reset($arr);
lo suficientemente bueno si no está tratando de mantener el puntero de la matriz en su lugar, y con matrices muy grandes incurre en una cantidad mínima de sobrecarga. Dicho esto, hay algunos problemas con esto:La forma de hacerlo sin cambiar el puntero:
El beneficio de
$arr[reset(array_keys($arr))];
es que genera una advertencia si la matriz está realmente vacía.fuente
Otra forma fácil y sencilla de hacerlo es usar array_values
fuente
reset()
es una opción mucho mejor ya que devuelve falso si la matriz está vacía. su solución no funcionará, por ejemplo, en la preguntaarray_values($array)[0] ?? FALSE
Pruebe si la variable es una matriz antes de obtener el primer elemento. Al crear dinámicamente la matriz si está configurada como nula, se obtiene un error.
Por ejemplo:
fuente
Podemos hacer
$first = reset($array);
En vez de
Como
reset()
devuelve el primer elemento de la matriz después de reiniciar;
fuente
Puedes hacer:
fuente
Use la función reset () para obtener el primer elemento de esa matriz sin conocer la clave de esta manera.
salida // 400
fuente
Puedes probar esto.
Para obtener el primer valor de la matriz: -
Para obtener la primera clave de la matriz
fuente
Podrías usar array_shift
fuente
Hago esto para obtener el primer y último valor. Esto funciona con más valores también.
fuente
Comenzando con PHP 7.3.0 , es posible hacerlo sin restablecer el puntero interno. Se podría utilizar
array_key_first
. Si está seguro de que su matriz tiene valores, puede hacer lo siguiente:Lo más probable es que desee manejar el caso donde la matriz está vacía:
fuente
solo puedes usar
$array[0]
. siempre te dará el primer artículofuente