Я не могу сравнить две строки в PHP - PullRequest
1 голос
/ 14 марта 2011
    <?php
    $gender = "devilcode";
    if (($gender == "female") || ($gender = "male"))
        {
            echo "ok";
        }
    else echo "no";
    ?>

Он должен вывести «no», но выдает «ok». Что я делаю не так?

Ответы [ 6 ]

13 голосов
/ 14 марта 2011

Вы назначаете $gender мужчиной, вместо того, чтобы проверять его для сравнения, вам нужны два знака равенства:

$gender = "devilcode";
if (($gender == "female") || ($gender == "male"))
    echo "ok";
else 
    echo "no";
7 голосов
/ 14 марта 2011

Вы пропускаете знак равенства:

($gender == "male")

Редактировать: по этой причине многие кодеры предлагают написать сравнение наоборот, со статическим значением слева:

if ("male" == $gender) { ... }

Таким образом, если вы забудете и используете = вместо ==, вы получите синтаксическую ошибку.

5 голосов
/ 14 марта 2011

Является ли вторая часть IF $gender="male"? Я думаю, что это всегда возвращает истину и вызывает проблему. Сделай это $gender=="male"

2 голосов
/ 14 марта 2011

есть ошибка во второй части вашего теста.заменить

($gender = "male") // assign $gender with the value "male"
                   // this is always evaluated to TRUE in your test

на

($gender == "male") // test that $gender is equal to "male"
1 голос
/ 05 сентября 2012

Вы присваиваете переменную $gender мужскому ($gender = 'male') вместо того, чтобы сопоставлять его ($gender == 'male')

Также, если вы хотите проверить несколько возможных результатов, попробуйте in_array()

$gender = 'devilcode'
$genders = array('female','male','unknown')
if(in_array($gender, $genders)){
 echo 'ok';
}else{
 echo 'no';
}

С уважением.

1 голос
/ 15 июля 2011

Хорошей практикой для написания условий, защищающих от ошибок, подобных этой, является использование обратной записи:

if ('female' === $gender || 'male' === $gender) {...    

или:

$allowed = array('male', 'female', 'unknown');
if (in_array($gender, $allowed)) {... 
...