Non so come aiutarti.
Una possibile soluzioni potrebbe essere che, il valore '0' viene interpretato come numero, non come stringa. Così, quando viene fatto il confronto, l'interprete tenta di convertire "true" e "false" in numeri, dato che nessuna delle stringhe ne contiene, viene automaticamente assegnato alla conversione il risultato di "0", per questo il confronto risulta true.
Questa è solo un'ipotesi ovviamente, ma, in questo caso, prova a modificare il codice in questo modo:
Codice PHP:
if(sprintf("%05s", $array['campo']) == sprintf("%05s", 'true'))
if(sprintf("%05s", $array['campo']) == sprintf("%05s", 'false'))
In questo modo viene effettuata la conversione in stringhe di entrambi i termini di uguaglianza, evitando (spero) che venga effettuato un paragone tra interi, come sembra sia avvenuto prima.
Spero di esserti stato utile!