user447752
user447752

Reputation:

PHP string comparison using '=='

I did a few tests with strings using '=='. I know to compare strings using '==' is not the way, but there is a weird behavior I want to solve.

I'm following the PHP documentation on page Comparison Operators. This is the test I did:

<?php
   var_dump( "100" == "1e2" ); // Outputs boolean true
   var_dump( (int) "100" ); // int 100
   var_dump( (int) "1e2" ); // int 1
?>

The documentation says when we compare strings with numbers, PHP first converts the string to numbers, but when I convert '100' and '1e2' to numbers they are not equal. The comparison should outputs boolean false.

Why is this weird behavior?

Upvotes: 5

Views: 526

Answers (2)

user1440875
user1440875

Reputation:

Type Juggling is not equal to Type Casting

From the Type Juggling page

If either operand is a float, then both operands are evaluated as floats, and the result will be a float. Otherwise, the operands will be interpreted as integers, and the result will also be an integer.

Upvotes: 0

icktoofay
icktoofay

Reputation: 129011

Not all numbers are integers. 1e2 is a float (that happens to be representable as an integer, but is not directly convertible to an integer). Try converting to floats rather than ints:

<?php 
   var_dump( "100" == "1e2" ); // bool(true)
   var_dump( (float) "100" );  // float(100)
   var_dump( (float) "1e2" );  // float(100)
?> 

Upvotes: 4

Related Questions