ho voluto aggiungere i miei 2 centesimi su questa questione, dal momento che mi mancava una via di mezzo fuori.
Come già detto isset()
valuterà il valore della chiave in modo che ritorni false
se tale valore è null
dove array_key_exists()
verificherà solo se la chiave esiste nell'array.
Ho ho fatto funzionare un punto di riferimento semplice utilizzando PHP 7, i risultati mostrati è il tempo impiegato per terminare l'iterazione:
$a = [null, true];
isset($a[0]) # 0.3258841 - false
isset($a[1]) # 0.28261614 - true
isset($a[2]) # 0.26198816 - false
array_key_exists(0, $a) # 0.46202087 - true
array_key_exists(1, $a) # 0.43063688 - true
array_key_exists(2, $a) # 0.37593913 - false
isset($a[0]) || array_key_exists(0, $a) # 0.66342998 - true
isset($a[1]) || array_key_exists(1, $a) # 0.28389215 - true
isset($a[2]) || array_key_exists(2, $a) # 0.55677581 - false
array_key_isset(0, $a) # 1.17933798 - true
array_key_isset(1, $a) # 0.70253706 - true
array_key_isset(2, $a) # 1.01110005 - false
Ho aggiunto i risultati di questa funzione personalizzata con questo punto di riferimento anche per il completamento:
function array_key_isset($k, $a){
return isset($a[$k]) || array_key_exists($k, $a);
}
come si è visto e già detto isset()
è fas metodo di prova ma può restituire false se il valore è null
. Questo potrebbe dare risultati indesiderati e di solito si dovrebbe usare array_key_exists()
se questo è il caso.
Tuttavia esiste una via di mezzo e che sta utilizzando isset() || array_key_exists()
. Questo codice utilizza in genere la funzione più veloce isset()
e seisset()
restituisce false solo utilizzare array_key_exists()
per convalidare. Mostrato nella tabella sopra, è veloce come chiamare semplicemente isset()
.
Sì, è un po 'più da scrivere e il wrapping in una funzione è più lento ma molto più semplice. Se hai bisogno di questo per le prestazioni, controllare i big data, ecc. Scriverlo per intero, altrimenti se è un utilizzo di 1 volta che un overhead molto minore nella funzione array_key_isset()
è trascurabile.
Avete effettivamente * provato * che è più veloce? – Tomalak
Non ho eseguito alcun benchmark, no. Dovrei avere prima di chiedere? – alex
'isset' non si comporterà mai esattamente come' array_key_exists', l'esempio di codice che presumibilmente si comporta in modo identico genera un Avviso se la chiave non esiste. – deceze