2009-10-24 19 views
70

Si tuviera una matriz como:¿Cómo obtener el primer elemento de una matriz PHP asociativa?

$array['foo'] = 400; 
$array['bar'] = 'xyz'; 

Y quería obtener el primer elemento de esa matriz sin conocer la clave para ello, ¿cómo iba a hacer eso? ¿Hay una función para esto?

+0

* (referencia) * [Arrays] (http://de2.php.net/manual/en/language.types.array.php) y [Array Functions] (http://php.net/manual) /es/ref.array.php) – Gordon

Respuesta

155

reset() le da el primer valor de la matriz si tiene un elemento dentro de la matriz:

$value = reset($array); 

También le da FALSE en caso de que la matriz esté vacía.

+0

Para tener en cuenta: '$ arr = array (/ * stuff * /); $ val = $ arr? reset ($ arr):/* value para indicar que la matriz está vacía * /; ' – cwallenpoole

+0

cambiando el puntero en la matriz podría interferir con el código de otra persona ... – user2782001

30

bucle falso que rompe en la primera iteración:

$key = $value = NULL; 
foreach ($array as $key => $value) { 
    break; 
} 

echo "$key = $value\n"; 

O utilice each() (advertencia:deprecated as of PHP 7.2.0):

reset($array); 
list($key, $value) = each($array); 

echo "$key = $value\n"; 
+2

Probablemente porque reset() es más simple. – mjs

+1

Porque la solución está en su primera línea de código pero continúa escribiendo otra línea completamente innecesaria. – markus

+13

restablecer no devolverá la clave – HarryFink

13

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 que su puntero de memoria interna que hace referencia, que es el primer elemento de forma predeterminada.

$first = current($array); 

Si desea asegurarse de que esté apuntando al primer elemento, siempre se puede utilizar reset().

reset($array); 
$first = current($array); 
+2

Me gusta esta respuesta como la más completa, pero tenga en cuenta' reset () 'de hecho devuelve el elemento, por lo que seguir con un' $ first = current ($ array) 'es redundante. –

1

Usted podría utilizar array_shift

+2

Pero tenga en cuenta que la matriz tendrá un elemento eliminado. – challet

3

Podemos hacer $ = primer reinicio ($ array);

En lugar de

reset($array); 

$ primera = corriente ($ array);

Como reset()

devuelve el primer elemento de la matriz después de la reposición;

3

Pruebe si la variable a es una matriz antes de obtener el primer elemento. Cuando se crea dinámicamente la matriz si está configurada como nula, se obtiene un error.

Por ejemplo:

if(is_array($array)) 
{ 
    reset($array); 
    $first = key($array); 
} 
5

Para que lo que tenemos algunas otras opciones: reset($arr); suficientemente bueno si usted no está tratando de mantener el puntero en el lugar, y con matrices muy grandes que incurre en una cantidad mínima de arriba.Dicho esto, hay algunos problemas con él:

$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 manera de hacer esto sin cambiar el puntero:

$arr[reset(array_keys($arr))]; // OR 
reset(array_values($arr)); 

El beneficio de $arr[reset(array_keys($arr))]; es que plantea una advertencia si la matriz está realmente vacía .

+0

respuesta muy descriptiva, y significa mucho para los demás. Gracias hombre. – Jigar7521

1

Lo hago 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 
4

otra manera fácil y sencilla de hacerlo use array_values ​​

array_values($array)[0] 
+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 – Northys

+0

En PHP 7+, algo así funcionaría: 'array_values ​​($ array) [0] ?? FALSO' – MarthyM

1

Puede 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 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)); 
    ?> 
0

Usted puede hacer:

$values = array_values($array); 
echo $values[0]; 
2

Si no lo hace saber lo suficiente sobre la matriz (no está seguro si la primera clave es foo o bar) entonces la matriz podría ser vacía.

lo tanto, sería mejor comprobar, sobre todo si existe la posibilidad de que el valor devuelto podría ser el valor booleano FALSE:

$value = empty($arr) ? $default : reset($arr); 

El código anterior utiliza reset y así tiene efectos secundarios (se restablece el puntero interno de la matriz), por lo que es posible que prefiera utilizar array_slice para acceder rápidamente una copia del primer elemento de la matriz:

$value = $default; 
foreach(array_slice($arr, 0, 1) as $value); 

Suponiendo que se desea conseguir la clave y el valor separado, es necesario 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 sencilla de conseguir la última elemento , clave y el valor por separado:

foreach(array_slice($arr, -1, 1, true) as $key => $value); 
Cuestiones relacionadas