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?
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:
reset() ti dà il primo valore dell'array se hai un elemento all'interno dell'array:
$value = reset($array);
Ti dà anche FALSEnel caso in cui l'array sia vuoto.
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
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);
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 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];
}
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";
reset()funzione recupererebbe solo il primo valore.
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);
reset()realtà restituisce l'elemento, quindi in seguito con a $first = current($array)è ridondante.
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.
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
array_values($array)[0] ?? FALSE
Possiamo fare
$first = reset($array);
Invece di
reset($array);
$first = current($array);
Come reset()
restituisce il primo elemento dell'array dopo il reset;
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
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));
?>
È possibile utilizzare array_shift
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
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)];
puoi semplicemente usare $array[0]. ti darà sempre il primo oggetto