Si tuviera una matriz como:
$array['foo'] = 400;
$array['bar'] = 'xyz';
Y quería sacar el primer elemento de esa matriz sin saber la clave, ¿cómo haría eso? ¿Hay 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.
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
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 reset
y tiene efectos secundarios (restablece el puntero interno de la matriz), por lo que puede preferir usar 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 tanto la clave como 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 un 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);
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:
$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 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_keys
que solo tomará las teclas.
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 $array
con
$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];
}
Fake loop 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: en desuso a partir de PHP 7.2.0 ):
reset($array);
list($key, $value) = each($array);
echo "$key = $value\n";
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.
$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()
.
reset($array);
$first = current($array);
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:
$arr = array(1,2);
current($arr); // 1
next($arr); // 2
current($arr); // 2
reset($arr); // 1
current($arr); // 1 !This was 2 before! We've changed the array's pointer.
La forma de hacerlo sin cambiar el puntero:
$arr[reset(array_keys($arr))]; // OR
reset(array_values($arr));
El beneficio de $arr[reset(array_keys($arr))];
es que genera una advertencia si la matriz está realmente vacía.
Otra forma fácil y sencilla de hacerlo es usar array_values
array_values($array)[0]
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
array_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:
if(is_array($array))
{
reset($array);
$first = key($array);
}
Podemos hacer
$first = reset($array);
En vez de
reset($array);
$first = current($array);
Como reset()
devuelve el primer elemento de la matriz después de reiniciar;
Puedes hacer:
$values = array_values($array);
echo $values[0];
Use la función reset () para obtener el primer elemento de esa matriz sin conocer la clave de esta manera.
$value = array('foo' => 400, 'bar' => 'xyz');
echo reset($value);
salida // 400
Puedes probar esto.
Para obtener el primer valor de la matriz: -
<?php
$large_array = array('foo' => 'bar', 'hello' => 'world');
var_dump(current($large_array));
?>
Para obtener la primera clave de la matriz
<?php
$large_array = array('foo' => 'bar', 'hello' => 'world');
$large_array_keys = array_keys($large_array);
var_dump(array_shift($large_array_keys));
?>
Podrías usar array_shift
Hago esto para obtener el primer y último valor. Esto funciona con más valores también.
$a = array(
'foo' => 400,
'bar' => 'xyz',
);
$first = current($a); //400
$last = end($a); //xyz
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:
$first = (empty($array)) ? $default : $array[array_key_first($array)];
solo puedes usar $array[0]
. siempre te dará el primer artículo