Ошибка PHP с условным оператором? - PullRequest
0 голосов
/ 09 января 2012
$i=0;
$j='00:15';

if ($i==$j)
    echo "equal";
else
    echo "not equal";

отображается равным?

Ответы [ 5 ]

6 голосов
/ 09 января 2012

00:15 сначала приводится к целому числу, а затем сравнивается с $i.Поскольку intval() (который выполняет приведение) останавливается на первом нечисловом символе, 00:15 приводится к нулю, что равно нулю.Здесь нет ошибок, вот как работает оператор ==.

Если вы хотите избежать приведения, используйте ===.

2 голосов
/ 09 января 2012

Используя ==, типы будут преобразованы перед их сравнением. В этом случае оба будут преобразованы в целое число, и когда вы преобразуете нечисловую строку в целое число, это, вероятно, приведет к 0.

Если вместо этого вы используете оператор ===, вы получите ожидаемый результат.

1 голос
/ 09 января 2012

string и int сравниваются как int, поэтому $j здесь преобразуется в 0, потому что начинается с 00

0 голосов
/ 16 января 2012

Оказывается, что === проблематично

, например, 10 === 10 будет ложным, если одно целое, а другое - строка, даже если они идентичны, как это может быть при публикации форм.

Решение, которое я использовал, было:

if ("$ i" == "$ j")

таким образом, он просто проверяет, идентичны ли они независимо от типа

0 голосов
/ 09 января 2012

Совсем не причудливо - при сравнении строки с целым числом первая приводится к целому числу, а затем сравнивается. Используйте === для проверки типа, и вы увидите реальный результат

...