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?
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"
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, llamandonext()
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áfalse
lo que puede generar errores si espera que la matriz contengabool
valores.– jacob
26 oct 2021 a las 19:02
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 contrarioreset($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()
ycurrent()
regresaráfalse
lo que puede generar errores si espera que la matriz contengabool
valores.– jacob
26 oct 2021 a las 19:03
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 contrarioreset($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()
ycurrent()
regresaráfalse
lo que puede generar errores si espera que la matriz contengabool
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
¿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