Почему это всегда возвращает true
:
$s = '334rr'; $i = (int)$s; if ($i == $s) { echo true; } else { echo false; }
Если я эхо $i
он дает значение 334
, которое отличается от $s
334rr
.
Из руководства :
Если вы сравниваете число со строкой или сравниваете числовые строки, то каждая строка преобразуется в число, а сравнение выполняется численно.
Итак: ($i == $s)
совпадает с ($i == (int)$s)
для значений, которые вы указали.
Используйте ===
чтобы избежать манипуляции с типом.
При сравнении строки с целым числом, используя ==
, строка будет пытаться применить к целому числу.
Попробуй это
$s = '334rr'; $i = intval($s); if ($i == $s) { echo true; } else { echo false; }
Сравнение строк с int не рекомендуется. Вы должны использовать ===
вместо этого, который будет проверять один и тот же тип данных, а также одно и то же значение.
PHP преобразует строку $ s в целое число по сравнению с другим целым числом ($ i). Это в основном делает это (ну, я не знаю, что он делает внутренне, но это сводится к такому):
if($i == (int) $s)
Что делает утверждение истинным