Volevo aggiungere i miei 2 centesimi a questa domanda, poiché mi mancava una via di mezzo.
Come già detto isset()
, valuterà il valore della chiave in modo che ritorni false
se quel valore è null
dove array_key_exists()
controllerà solo se la chiave esiste nell'array.
Ho eseguito un semplice benchmark utilizzando PHP 7, i risultati mostrati sono 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 anche con questo benchmark per il completamento:
function array_key_isset($k, $a){
return isset($a[$k]) || array_key_exists($k, $a);
}
Come visto e già detto isset()
è il metodo più veloce ma può restituire false se il valore è null
. Questo potrebbe dare risultati indesiderati e di solito si dovrebbe usarearray_key_exists()
questo caso.
Tuttavia c'è una via d'uscita e che sta usando isset() || array_key_exists()
. Questo codice utilizza generalmente la funzione più veloce isset()
e se isset()
restituisce solo false, utilizzare array_key_exists()
per convalidare. Indicato nella tabella sopra, è veloce come una semplice chiamata isset()
.
Sì, scrivere e racchiuderlo in una funzione è un po 'più lento ma molto più semplice. Se questo è necessario per prestazioni, controllo di big data, ecc., Scriverlo per intero, altrimenti è un utilizzo di 1 volta che un sovraccarico molto piccolo in funzione array_key_isset()
è trascurabile.