PHP сравнение '==' проблема - PullRequest
       1

PHP сравнение '==' проблема

4 голосов
/ 16 декабря 2010

Почему выход «in»?

<?php
    if (1=='1, 3')
    {
        echo "in";
    }
?>

Ответы [ 8 ]

5 голосов
/ 16 декабря 2010

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

Если бы ваше первое значение было строкой - то есть '1' в кавычках, а не целым числом, то совпадение не состоялось бы, потому что обе стороныстроки, так что он бы сравнивал строки, и они разные строки.

Если вам нужен оператор точного соответствия, который не выполняет преобразование типов, PHP также предлагает оператор тройного равенства, === Это может быть то, что вы ищете вместо этого.

Надеюсь, это поможет.

4 голосов
/ 16 декабря 2010

Вы сравниваете строку и целое число. Сначала строка должна быть преобразована в целое число, а PHP преобразует числовые строки в целые числа. Так как начало этой строки - «1», она сравнивает число 1 с номером 1, они равны.

Какие функции вы намеревались?

3 голосов
/ 16 декабря 2010

Поскольку PHP выполняет преобразование типов , он превращает строку в целое число, и его методы работают так, что он считает все числа до нечислового значения.В вашем случае это подстрока ('1') (потому что , является первым нечисловым символом).Если строка начинается с чего-либо, кроме числа, вы получите 0.

1 голос
/ 16 декабря 2010

Если вы пытаетесь проверить, равен 1 1 или 3, то я бы определенно сделал это следующим образом:

if (1 == 1 || 1 == 3)
1 голос
/ 16 декабря 2010

Пожалуйста, обратитесь к документации PHP:

http://php.net/manual/en/language.operators.comparison.php

0 голосов
/ 16 декабря 2010
if(in_array(1, array(1,3)) {
    echo "in";
}
0 голосов
/ 16 декабря 2010

Полагаю, вы хотите знать, находится ли переменная в диапазоне значений.

Вы можете использовать in_array:

if (in_array(1, array(1, 3, 5, 6)))
 echo "in";
0 голосов
/ 16 декабря 2010

Выходные данные должны быть:

in

Из документации PHP:

При преобразовании строки в целое число PHP анализирует строку по одному символу за раз донаходит нецифровый символ(Число может, необязательно, начинаться со знака + или -.) Полученное число анализируется как десятичное число (основание-10).Неудачный анализ действительного десятичного числа возвращает значение 0.

...