19

Possible Duplicate:
Why does PHP consider 0 to be equal to a string?

I have this piece of code:

$o['group'] = "prueba";
if( $o['group'] == 0){
    die("test");
}

Why it print test? how can be possible that a string is equal to zero?

Community
  • 1
  • 1
Arnold Roa
  • 7,335
  • 5
  • 50
  • 69

2 Answers2

18

if you want it to exactly match the string try using the exact typof three equal signs like so
if( $o['group'] === 0){
the == will always evaluate to true when comparing a string to a integer of 0

'a string' == 0 also evaluates to true because any string is converted into an integer when compared with an integer. If PHP can't properly convert the string then it is evaluated as 0. So 0 is equal to 0, which equates as true.

From here

Laurence Burke
  • 2,348
  • 14
  • 26
  • 1
    Still wrong. `'0.1e2' == 0` is false although `(int) '0.1e2' === 0` is true. The string content determines which data type (*int* or *float*) the string is converted to. – Gumbo Dec 29 '11 at 19:27
  • Yes, this is still wrong. Only works if $o['group'] == '0' – Nikolay Traykov Aug 25 '17 at 13:38
10

Use comparison operator with type check "===". Look here for the example http://php.net/manual/en/language.operators.comparison.php and explanation why non-numerical string compared to zero always returns true.

Alex Z
  • 335
  • 3
  • 7