Obtener el primer elemento de una matriz
Tengo una matriz:
array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
Me gustaría obtener el primer elemento de esta matriz. Resultado esperado: cadena apple
Un requisito: no se puede hacer pasando por referencia , por lo que array_shift
no es una buena solución.
¿Cómo puedo hacer esto?
Respuesta original, pero costosa (O(n)):
array_shift(array_values($array));
En O(1):
array_pop(array_reverse($array));
Otros casos de uso, etc...
Si modificar (en el sentido de restablecer los punteros de la matriz) $array
no es un problema, puede usar:
reset($array);
En teoría, esto debería ser más eficiente si se necesita una "copia" de matriz:
array_shift(array_slice($array, 0, 1));
Con PHP 5.4+ (pero puede causar un error de índice si está vacío):
array_values($array)[0];
Como señaló Mike (la forma más sencilla 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 la documentación de PHP :
reinicio mixto (matriz | objeto &$matriz );
Descripción:
reset() rebobina el puntero interno de la matriz al primer elemento y devuelve el valor del primer elemento de la matriz, o FALSO si la matriz está vacía.
$first_value = reset($array); // First element's value
$first_key = key($array); // First element's key
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.
Así que funciona hasta que haya reposicionado el puntero de la matriz; de lo contrario, tendrá que usar reset()
el cual rebobinará la matriz y devolverá el primer elemento de la matriz.
Según el reinicio 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()
yreset()
$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"