Eu sempre tenho que me lembrar que o PHP faz conversões de tipo ao comparar operandos. Tive um comportamento realmente inesperado ao iterar por meio de um objeto JSON usando os iteradores SPL e pesquisar um valor de chave específico.
Eu sabia que o valor seria encontrado duas vezes, mas acabei achando 6 vezes. Acontece que o iterador estava detectando uma série de matrizes enum e avaliando como verdadeiro quando encontrou o primeiro elemento da matriz. O valor da chave que eu estava procurando estava sendo convertido em um inteiro quando encontrou a chave 0 de um array normal e então avaliado como verdadeiro.
Esta é a citação específica no manual de PHP online:
Se você comparar um número com uma string ou se a comparação envolver strings numéricas, cada string será convertida em um número e a comparação será realizada numericamente.
Manual de PHP »
Referência de linguagem» Operadores de comparação
A página Type Juggling na Referência de Linguagem do PHP também apresenta algumas informações adicionais sobre esse comportamento.
Manual de PHP »
Referência de linguagem» Malabarismo de tipo