PHP: obtiene el primer elemento de una matriz

7 minutos de lectura

avatar de usuario de hsz
hsz

tengo una matriz:

array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )

Me gustaría obtener el primer elemento de esta matriz. Resultado Esperado: cuerda apple

Un requisito: no se puede hacer con pasar por referenciaasi que array_shift no es una buena solución.

¿Cómo puedo hacer esto?

  • ¿Qué quieres decir con que no se puede hacer por referencia?

    – cjk

    17 de diciembre de 2009 a las 12:34

  • La función no debería funcionar usando &$array como parámetros.

    – hsz

    17 de diciembre de 2009 a las 12:41

  • Sospecho que lo que “realmente” quiere decir con “no se puede hacer por referencia”, es que su matriz se devuelve dinámicamente desde una base de datos, y no desea pasar la matriz a una variable antes de tomar el primer elemento de eso. Si tengo razón, entonces la gran mayoría de todas las soluciones que se le brindan a continuación (incluida la respuesta aceptada) son insuficientes.

    – carro antes que caballo

    23/10/2012 a las 20:16

  • ¿Solo tiene que obtenerlo o obtenerlo y eliminarlo de la matriz existente?

    – Jo Smo

    10 de julio de 2014 a las 15:21

  • Para el uso básico de Arrays puede revisar este enlace technofusions.com/introduction-to-arrays-in-php

    – Vikrant Vir Bhalla

    28/07/2016 a las 18:50

avatar de usuario de lepe
lepe

Como señaló Mike (la forma más fácil posible):

$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // Echoes "apple"

Si desea obtener la clave: (ejecútela después del reinicio)

echo key($arr); // Echoes "4"

De documentación de PHP:

mezclado Reiniciar (matriz | objeto &$matriz );

Descripción:

Reiniciar() rebobina matriz puntero interno al primer elemento y devuelve el valor del primer elemento de la matriz, o FALSO si la matriz está vacía.

  • Aunque se pasa por referencia a reset, la matriz original no se modifica. Supongo que esa es la razón por la que hsz no quiere pasarlo por referencia..?

    –Dennis Jamin

    4 oct 2013 a las 11:22

  • Se modifica el iterador de la matriz. Si haces esto en un foreach con la matriz de sujetos, lo arruinarás.

    – Zenexer

    13 de noviembre de 2013 a las 6:11

  • @Zenexer esto no siempre (generalmente) es cierto. Generalmente en la práctica, foreach copiará la matriz por la que está pasando.

    – Lucas primos

    6 de junio de 2015 a las 11:32

  • @Angger después del reinicio, puedes llamar key($arr) y obtendrá ‘4’ (agregado a la respuesta)

    – lepe

    19 de abril de 2017 a las 3:03


  • Ni @Zenexer ni Luke Cousins ​​​​tienen razón: 1) foreach no usa el puntero interno de una matriz, sino que crea su propio puntero. Es fácil verificar el restablecimiento de llamadas dentro de foreach: el ciclo seguirá su camino sin ningún efecto de reset(). 2) ¡No, foreach NO crea una copia de una matriz! Solo crea su propio puntero (ni siquiera una copia de uno existente; también es fácil de verificar, llamando next() antes de foreach).

    – dmikam

    1 de junio de 2018 a las 8:01


  • En realidad, no lo he probado, pero parece que este enfoque sería el más eficiente.

    – albañil81

    27 de agosto de 2012 a las 15:23

  • El único problema es la pregunta por el valor, no la clave. Por lo tanto, se debe usar current($array) en lugar de key($array)

    – zmonteca

    13/09/2012 a las 18:40

  • @zmonteca $primer_valor = reset($matriz); aquí obtiene el valor, la función reset () rebobina el puntero interno de las matrices y devuelve el primer elemento.

    – S3Mi

    3 de octubre de 2012 a las 13:16

  • la mejor respuesta! estaba buscando la equivalencia key() para obtener el primer valor. ¡Esto ayuda!

    – Alain Tiemblo

    19 de octubre de 2012 a las 10:06

  • ¿Qué pasa si la matriz está vacía? reset() regresará falselo que puede generar errores si espera que la matriz contenga bool valores.

    – jacob

    26 oct 2021 a las 19:02

Avatar de usuario de Tofeeq
Tofeeq

current($array)

devuelve el primer elemento de una matriz, según el manual de PHP.

Cada matriz tiene un puntero interno a su elemento “actual”, que se inicializa en el primer elemento insertado en la matriz.

Por lo tanto, funciona hasta que haya reposicionado el puntero de matriz, y de lo contrario tendrá que usar reset() que rebobinará la matriz y devolverá el primer elemento de la matriz

De acuerdo con el restablecimiento manual de PHP.

reset() rebobina el puntero interno de la matriz al primer elemento y devuelve el valor del primer elemento de la matriz.

Ejemplos de current() y reset()

$array = array('step one', 'step two', 'step three', 'step four');

// by default, the pointer is on the first element
echo current($array) . "<br />\n"; // "step one"

//Forward the array pointer and then reset it

// skip two steps
next($array);
next($array);
echo current($array) . "<br />\n"; // "step three"

// reset pointer, start again on step one
echo reset($array) . "<br />\n"; // "step one"

  • No sé por qué esta no fue la respuesta aceptada, ya que responde la pregunta de manera bastante simple y precisa.

    – relipse

    30 de diciembre de 2014 a las 21:31

  • current($array) solo funcionará si el puntero de la matriz está “actualmente” apuntando al primer elemento, de lo contrario reset($array) sería requerido.

    – Jon

    15 de enero de 2015 a las 23:23


  • Parece current() ya no requiere una referencia, aunque los documentos de PHP no reflejan esto. Así que creo que esta se ha convertido en la mejor solución.

    – Ryan

    18 de febrero de 2016 a las 0:31

  • @Ryan estuvo de acuerdo, pero esta solución se proporcionó 2 años antes de 2014 en esta otra respuesta de este mismo hilo… Es extraño que esta oración incompleta haya recibido más votos a favor.

    – CPH Python

    4 de julio de 2018 a las 13:23

  • ¿Qué pasa si la matriz está vacía? reset() y current() regresará falselo que puede generar errores si espera que la matriz contenga bool valores.

    – jacob

    26 oct 2021 a las 19:03

Avatar de usuario de Martin
Martín

$arr = $array = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // echoes 'apple'

Si no desea perder la posición actual del puntero, simplemente cree un alias para la matriz.

  • No sé por qué esta no fue la respuesta aceptada, ya que responde la pregunta de manera bastante simple y precisa.

    – relipse

    30 de diciembre de 2014 a las 21:31

  • current($array) solo funcionará si el puntero de la matriz está “actualmente” apuntando al primer elemento, de lo contrario reset($array) sería requerido.

    – Jon

    15 de enero de 2015 a las 23:23


  • Parece current() ya no requiere una referencia, aunque los documentos de PHP no reflejan esto. Así que creo que esta se ha convertido en la mejor solución.

    – Ryan

    18 de febrero de 2016 a las 0:31

  • @Ryan estuvo de acuerdo, pero esta solución se proporcionó 2 años antes de 2014 en esta otra respuesta de este mismo hilo… Es extraño que esta oración incompleta haya recibido más votos a favor.

    – CPH Python

    4 de julio de 2018 a las 13:23

  • ¿Qué pasa si la matriz está vacía? reset() y current() regresará falselo que puede generar errores si espera que la matriz contenga bool valores.

    – jacob

    26 oct 2021 a las 19:03

PHP 7.3 agregó dos funciones para obtener la primera y la última clave de una matriz directamente sin modificar la matriz original y sin crear ningún objeto temporal:

Aparte de ser semánticamente significativas, estas funciones ni siquiera mueven el puntero de la matriz (como foreach haría).

Teniendo las claves, uno puede obtener los valores directamente por las claves.


Ejemplos (todos ellos requieren PHP 7.3+)

Obtener la primera/última clave y valor:

$my_array = ['IT', 'rules', 'the', 'world'];

$first_key = array_key_first($my_array);
$first_value = $my_array[$first_key];

$last_key = array_key_last($my_array);
$last_value = $my_array[$last_key];

Obtener el primer/último valor como una sola línea, asumiendo que la matriz no puede estar vacía:

$first_value = $my_array[ array_key_first($my_array) ];

$last_value = $my_array[ array_key_last($my_array) ];

Obtener el primer/último valor como frases de una sola línea, con valores predeterminados para matrices vacías:

$first_value = empty($my_array) ? 'default' : $my_array[ array_key_first($my_array) ];

$last_value = empty($my_array) ? 'default' : $my_array[ array_key_last($my_array) ];

  • acortar con operador de fusión nulapor lo general, nulo es el valor predeterminado, por lo que: $first_value = $my_array[array_key_first($my_array)] ?? null;

    – Mitchell Mc Kenna

    1 de abril de 2020 a las 16:37


  • Desde PHP 7.3, esta debería ser la respuesta seleccionada.

    –Xavi Montero

    3 oct 2021 a las 10:20

¿Ha sido útil esta solución?