Felipe Weckx

PHP: in_array e arrays com valores true

Um detalhe muito importante da função in_array do PHP é o terceiro parâmetro $strict que por padrão tem o valor FALSE. Mas qual diferença exatamente ele faz? Vamos analisar o seguinte código:

A saída será simplesmente:

Porém, se adicionarmos ao array $array um item com o valor true:

A saída então será:

Ou seja, mesmo não havendo um item salmão no vetor $array a função in_array retornou true! Isto porque por padrão ela utiliza a comparação simples do PHP (ou “loose comparison”), ou seja, utilizando == (http://php.net/manual/en/types.comparisons.php) isto faz com que qualquer valor que não seja vazio ao ser comparado com true seja dado como igual. Isto pode causar um bug bastante difícil de rastrear já que o código a princípio funciona normalmente se for testado com arrays que não contenham o valor true. Para solucionar basta passar o terceiro parâmetro da função como true para que a função utilize a comparação estrita:

Com isto a comparação voltará a funcionar como esperado. Este é o tipo de erro que pode ser prevenido facilmente se o desenvolvimento for feito utilizando a metodologia TDD, mas se for feito sem pode ser realmente complicado de ser encontrado.