Come ottenere il primo elemento da un array PHP associativo?


146

Se avessi un array come:

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

E volevo estrarre il primo elemento da quell'array senza conoscere la chiave per esso, come lo farei? C'è una funzione per questo?


Risposte:



51

PHP <7.3

Se non sai abbastanza dell'array (non sei sicuro che la prima chiave sia foo o bar ), l'array potrebbe anche essere, forse, vuoto .

Quindi sarebbe meglio controllare, specialmente se c'è la possibilità che il valore restituito sia il FALSO booleano:

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

Il codice precedente usa resete quindi ha effetti collaterali (reimposta il puntatore interno dell'array), quindi potresti preferire l'uso array_sliceper accedere rapidamente a una copia del primo elemento dell'array:

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

Supponendo di voler ottenere sia la chiave che il valore separatamente , è necessario aggiungere il quarto parametro a array_slice:

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

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

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

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

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

prestazione

Se l'array non è molto grande, in realtà non è necessario array_slicee si può piuttosto ottenere una copia dell'intero array di chiavi, quindi ottenere il primo elemento:

$key = count($arr) ? array_keys($arr)[0] : null;

Se si dispone di un array molto grande, la chiamata a array_keysrichiederà tempo e memoria significativi più di array_slice(entrambe le funzioni eseguono l'array, ma quest'ultimo termina non appena ha raccolto il numero richiesto di elementi, che è uno).

Un'eccezione notevole è quando hai la prima chiave che punta a un oggetto molto grande e contorto. In tal caso array_sliceduplicherà quel primo grande oggetto, mentre array_keysafferrerà solo le chiavi.

PHP 7.3

PHP 7.3 implementa array_key_first()anchearray_key_last() . Questi vengono esplicitamente forniti per accedere in modo efficiente alla prima e all'ultima chiave senza ripristinare lo stato interno dell'array come effetto collaterale.

Quindi in PHP 7.3 è possibile accedere al primo valore di$array

$array[array_key_first($array)];

Faresti comunque meglio a verificare che l'array non sia vuoto, o otterrai un errore:

$firstKey = array_key_first($array);
if (null === $firstKey) {
    $value = "Array is empty"; // An error should be handled here
} else {
    $value = $array[$firstKey];
}

@AhmedShefeer bene, l'altra risposta non è solo quella accettata ma è stata lì per altri otto anni . Sto raccogliendo le briciole qui MrGreen. Ma grazie per il voto di fiducia!
LSerni,

1
Mi sembra che questa sia la risposta migliore, poiché l'unica altra non deprecata che fornisce sia la chiave che il valore è il ciclo foreach interrotto, che è imbarazzante. Le altre risposte danno solo il valore senza la chiave.
sootsnoot,

1
mi è piaciuto molto questo approccio moderno e aggiornato con il tempo.
sanjeet bisht,

@LSerni Non so se sei ancora attivo, ma ero bloccato e questo post ben spiegato e aggiornato mi ha salvato. Grazie
izk,

@izk Sono sempre attivo! :-D
LSerni

44

Ciclo falso che si interrompe alla prima iterazione:

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

echo "$key = $value\n";

O utilizzare each()( avviso: obsoleto a partire da PHP 7.2.0 ):

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

echo "$key = $value\n";

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

1
Perché la soluzione è nella tua prima riga di codice ma stai continuando a scrivere un'altra riga completamente non necessaria.
markus,

21
reset non restituirà la chiave
HarryFink

3
+1 per il "giro falso". Ho avuto bisogno di recuperare la chiave e il valore dei primi elementi, senza passare attraverso ciascun elemento. La reset()funzione recupererebbe solo il primo valore.
Phil Cross,

2
+1 anche per il loop falso, devo tenere la chiave, quindi ripristinare non era un'opzione
isJustMe

25

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 dell'array a cui punta il puntatore della memoria interna, che è il primo elemento per impostazione predefinita.

$first = current($array);

Se vuoi assicurarti che punta al primo elemento, puoi sempre usare reset().

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

3
Mi piace questa risposta come la più completa, ma la nota in reset()realtà restituisce l'elemento, quindi in seguito con a $first = current($array)è ridondante.
Tom Auger,

9

Solo così abbiamo altre opzioni: reset($arr);abbastanza buono se non stai cercando di mantenere il puntatore di array in posizione, e con array molto grandi comporta un minimo di overhead. 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 $arr[reset(array_keys($arr))];è che genera un avviso se l'array è effettivamente vuoto.


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

7

un altro modo semplice per farlo usa array_values

array_values($array)[0]

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

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

4

Verifica se la variabile è un array prima di ottenere il primo elemento. Quando si crea dinamicamente l'array se è impostato su null, viene visualizzato un errore.

Per esempio:

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

3

Possiamo fare $first = reset($array);

Invece di

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

Come reset()

restituisce il primo elemento dell'array dopo il reset;


2

Tu puoi fare:

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

2

Utilizzare la funzione reset () per estrarre il primo elemento da quell'array senza conoscere la chiave in questo modo.

$value = array('foo' => 400, 'bar' => 'xyz');
echo reset($value);

uscita // 400


2

Puoi provare questo.

Per ottenere il primo valore dell'array: -

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

Per ottenere la prima chiave dell'array

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


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

Funziona solo quando il puntatore interno si trova sul primo elemento. Anche se questo è buono perché non ripristina la posizione del puntatore, funziona solo quando il puntatore è già a riposo.
cjc,

1

A partire da PHP 7.3.0 è possibile fare a meno del reset del puntatore interno. Useresti array_key_first. Se sei sicuro che il tuo array abbia dei valori, allora puoi semplicemente fare:

$first = $array[array_key_first($array)];

Più probabilmente, ti consigliamo di gestire il caso in cui l'array è vuoto:

$first = (empty($array)) ? $default : $array[array_key_first($array)];

-3

puoi semplicemente usare $array[0]. ti darà sempre il primo oggetto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.