2009-10-24 27 views
70

Se avessi un array come:Come ottenere il primo elemento da un array PHP associativo?

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

E volevo ottenere il primo elemento di tale matrice senza conoscere la chiave per esso, come avrei fatto? C'è una funzione per questo?

+0

* (riferimento) * [Array] (http://de2.php.net/manual/en/language.types.array.php) e [Funzioni array] (http://php.net/manual /en/ref.array.php) – Gordon

risposta

155

reset() ti dà il primo valore della matrice se avete un elemento all'interno dell'array:

$value = reset($array); 

Fornisce anche FALSE nel caso in cui l'array sia vuoto.

+0

Nota: '$ arr = array (/ * stuff * /); $ val = $ arr? reset ($ arr):/* valore per indicare che l'array è vuoto * /; ' – cwallenpoole

+0

cambiando il puntatore nell'array potrebbe pasticciare con il codice di qualcun altro però .... – user2782001

30

anello falso che rompe alla prima iterazione:

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

echo "$key = $value\n"; 

Oppure utilizzare each() (avvertimento:deprecated as of PHP 7.2.0):

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

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

Probabilmente perché reset() è più semplice. – mjs

+1

Poiché la soluzione è nella prima riga di codice ma continui a scrivere un'altra riga completamente non necessaria. – markus

+13

reset non restituire la chiave – HarryFink

13

Ci sono alcune opzioni. array_shift() restituirà il primo elemento, ma rimuoverà anche il primo elemento dall'array.

$first = array_shift($array); 

current() restituirà il valore della matrice che il suo puntatore di memoria interna sta puntando, che è il primo elemento di default.

$first = current($array); 

Se si vuole fare in modo che punti al primo elemento, si può sempre utilizzare reset().

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

Mi piace questa risposta come più completa, ma nota' reset () 'restituisce effettivamente l'elemento, quindi seguirlo con' $ first = current ($ array) 'è ridondante. –

1

Si potrebbe utilizzare array_shift

+2

Tuttavia, è necessario rimuovere un elemento dalla matrice. – challet

3

Possiamo fare $ first = reset ($ array);

Invece di

reset($array); 

$ first = corrente ($ array);

Come reset()

restituisce il primo elemento della matrice dopo il ripristino;

3

Verificare se una variabile è una matrice prima di ottenere il primo elemento. Quando si crea dinamicamente la matrice se è impostata su null si ottiene un errore.

Per esempio:

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

solo in modo che abbiamo alcune altre opzioni: reset($arr); abbastanza buono se non stai cercando di tenere il puntatore al suo posto, e con molto grandi array comporta un importo minimo di sovraccarico.Detto questo, ci sono alcuni problemi con esso:

$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. 

Il modo per farlo senza cambiare il puntatore:

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

Il vantaggio di $arr[reset(array_keys($arr))]; è che esso genera un avviso se la matrice è in realtà vuoto .

+0

risposta molto descrittiva, e significa molto per gli altri. Grazie uomo. – Jigar7521

1

Faccio questo per ottenere il primo e l'ultimo valore. Funziona anche con più valori.

$a = array(
    'foo' => 400, 
    'bar' => 'xyz', 
); 
$first = current($a); //400 
$last = end($a); //xyz 
4

un altro modo facile e semplice per farlo utilizzare array_values ​​

array_values($array)[0] 
+0

'reset()' è un'opzione molto migliore poiché restituisce false se l'array è vuoto. la tua soluzione non funzionerà ad esempio nella domanda – Northys

+0

In PHP 7+ qualcosa del genere funzionerebbe: 'array_values ​​($ array) [0] ?? FALSE – MarthyM

1

Si può provare questo.
Per ottenere primo valore della matrice: -

<?php 
      $large_array = array('foo' => 'bar', 'hello' => 'world'); 
      var_dump(current($large_array)); 
    ?> 

Per ottenere prima chiave della matrice

<?php 
      $large_array = array('foo' => 'bar', 'hello' => 'world'); 
      $large_array_keys = array_keys($large_array); 
      var_dump(array_shift($large_array_keys)); 
    ?> 
0

Si può fare:

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

Se non lo fai sapere abbastanza sull'array (non sei sicuro se la prima chiave sia foo o bar) quindi l'array potrebbe essere vuoto.

Quindi sarebbe meglio controllare, soprattutto se c'è la possibilità che il valore restituito potrebbe essere il FALSE booleano:

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

Il codice precedente utilizza reset e così ha effetti collaterali (azzera il puntatore interno dell'array), quindi si potrebbe preferire utilizzare array_slice per accedere rapidamente a una copia del primo elemento della matrice:

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

Supponendo che si desidera ottenere sia la chiave e il valore separatamente, è necessario aggiungere il quarto parametro per array_slice:

foreach(array_slice($arr, 0, 1, true) as $key => $value); 

Per ottenere il primo elemento come una coppia (key => value):

$item = array_slice($arr, 0, 1, true); 

modifica semplice per ottenere l'ultimo elemento, chiave e il valore separatamente:

0.123.
foreach(array_slice($arr, -1, 1, true) as $key => $value); 
Problemi correlati