Voglio riportare qui un mio vecchio articolo del 2011 pubblicato su Nerdsopolis ancora attualissimo che evidenzia l’importaza di uno 0 in un linguaggio a tipizzazione dinamica come PHP.

Scenario: stai programmando in PHP e attraverso un’espressione condizionale IF vuoi eseguire qualcosa solo nel caso in cui un determinato valore sia presente in un array.
Nella condizione si farà quindi ricorso alla funzione array_search che restituisce la chiave dell’elemento quando il suo valore è presente nell’array:

if(array_search('quelCheCerco',$array)) {
    // eseguo il mio codice
}

Problema: nonostante tutto il nostro script ha comportamenti inaspettati, facciamo prove su prove e talvolta, anche quando siamo certi della presenza di un elemento nell’array, il codice non scatta… A volte sì, a volte no… Lo scenario peggiore per uno sviluppatore.

Spiegazione: se array_search trova il valore nella prima posizione di un array indicizzato numericamente, restituirà la sua chiave [0] che, nella verifica della condizione, equivale ad un bel FALSE!!!

Soluzione: una volta capito questo, il problmea è di facile soluzione, basta infatti impostare lo script in modo da eseguire una comparazione stretta::

if(array_search('quelCheCerco',$array) !== FALSE) {
    // eseguo il mio codice
}

Osservazione: riguardando oggi la reference, noto che rispetto al 2011 c’é un simpatico box di warning che avverte proprio di questa cosa… evidentemente non sono stato l’unico a snervarsi davanti a questo problema!

Warning

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.