I have the following piece of code:
$item[\'price\'] = 0;
/* Code to get item information goes in here */
if($item[\'price\'] == \'e\') {
$item[\'price\'
This is due to how PHP does the comparison operation that the == comparison operator denotes:
If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically. […] The type conversion does not take place when the comparison is
===
or!==
as this involves comparing the type as well as the value.
As the first operand is a number (0
) and the second is a string ('e'
), the string is also converted to a number (see also table Comparison with Various Types). The manual page on the string data type defined how the string to number conversion is done:
When a string is evaluated in a numeric context, the resulting value and type are determined as follows.
If the string does not contain any of the characters '
.
', 'e
', or 'E
' and the numeric value fits into integer type limits (as defined byPHP_INT_MAX
), the string will be evaluated as an integer. In all other cases it will be evaluated as a float.
In this case the string is 'e'
and thus it will be evaluated as a float:
The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be
0
(zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an 'e
' or 'E
' followed by one or more digits.
As 'e'
does not start with a valid numeric data, it evaluates to float 0
.