isset() vs array_key_exists()

9 Mar

Out Of Date Warning

Questo post è stato pubblicato più di 2 anni fa (il 9 marzo 2012). Le idee vanno avanti velocemente, le prospettive cambiano quindi i contenuti potrebbero non essere aggiornati. Ti prego di tenere in considerazione questo, e di verificare le informazioni tecniche presenti nell'articolo prima di farne affidamento per i tuoi scopi.

Qual’è il modo più performante per determinare se un elemento è contenuto in un array? Il seguente test ci schiarirà le idee.
A confronto ho messo la funzione isset() e la funzione array_key_exists(), la prima determina se una variabile è settata oppure è NULL, la seconda verifica che una chiave od un indice esista in un array.

Il test

Risultato:

isset() – array vuoto: 0.022
array_key_exists() – array vuoto: 0.083
isset() – array pieno: 0.014
array_key_exists() – array pieno: 0.051

PS. test eseguito su Windows XP con PHP 5.4 VC9

Il test è stato eseguito prima su un array vuoto e poi su un array popolato con 100.000 elementi. Da questo si evince:

  1. Entrambe le funzioni sono estremamente veloci, calcolando che per ogni test è stato eseguito 100.000 volte.
  2. Non vi è alcuna differenza nel lavorare con un array pieno oppure vuoto, anzi il test si è rivelato costantemente ed incredibilmente più veloce su un array pieno.
  3. isset() è 4 volte più performante di array_key_exists().

Dobbiamo tuttavia tenere presente che la funzione isset() restituirà FALSE anche se un elemento contiene valore NULL:

boolean false
boolean true

Conclusioni

Se la nostra applicazione non ha bisogno di distinguere se una chiave esiste oppure ha valore NULL allora ci conviene utilizzare isset() che sembra essere decisamente più veloce. Nel caso in cui gli elementi dell’array possono avere NULL come valore siamo obbligati ad utilizzare array_key_exists() altrimenti corriamo il rischio di ottenere un risultato errato.

Lascia un commento