2013-09-30 4 views
0

У меня есть переменная и ее тип - строка. var_dump() показывает:Сравнение строк PHP

var_dump() выход находится ниже:

string(14) 

// это мой код ..

$game_cat = "Some text"; // некоторый текст означает, на самом деле это одна из категории ниже 1,2, 3,4 ...

if ($game_cat === "Category 1") { 
     $cid = 1; 
} 

if ($game_cat === "Category 2") { 
     $cid = 2; 
} 

if ($game_cat === "Category 3") { 
     $cid = 0; 
} 

else{ 
     $cid = 999999; 
} 

Например, когда я изменить $game_cat к категории 1, как $game_cat = "Category 1"; $ cid must 1, но выход 999999.

Почему?

+0

Попробуйте использовать '==', если это работает, то строка может быть тем же значение, но не Точно так же. Обратите внимание, что ваша строка имеет 14 символов, в то время как «Категория 1» имеет 10, 12, включая двойные кавычки –

+0

Я пробовал, но не работает – hakiko

+0

Для сравнения строк он не должен иметь разницы между '==' и '==='. Дважды проверьте, что ваша капитализация такая же, и что вы не добавляете дополнительные пробелы с 'trim()'. –

ответ

1

Edit: Работа демо:

http://phpfiddle.org/main/code/g02-bjj

Попробуйте это:

$game_cat = "Category 2"; 

if ($game_cat === "Category 1") { 
     $cid = 1; 
} 

elseif ($game_cat === "Category 2") { 
    $cid = 2; 
} 

elseif ($game_cat === "Category 3") { 
    $cid = 0; 
} 

else { 
    $cid = 999999; 
} 
  1. Использование elseif: http://php.net/manual/en/control-structures.elseif.php
  2. http://www.php.net/manual/en/language.operators.comparison.php

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

+0

Я попробовал elseif, но это не возвращает ожидаемый результат. – hakiko

+1

Не нужно менять на '==' .... – Neal

+0

все еще не работает – hakiko

3

Использование elseif

if ($game_cat === "Category 1") { 
     $cid = 1; 
} 

elseif ($game_cat === "Category 2") { 
     $cid = 2; 
} 

elseif ($game_cat === "Category 3") { 
     $cid = 0; 
} 

else{ 
     $cid = 999999; 
} 

Какую делает код:

if ($game_cat === "Category 1") { 
     $cid = 1; //cid is 1 
} 

if ($game_cat === "Category 2") { 
     $cid = 2; //skipped 
} 

if ($game_cat === "Category 3") { 
     $cid = 0; //skipped 
} 

else{ 
     $cid = 999999; //cid == 999999 
} 
+0

Я попробовал но он не работает :( – hakiko

+0

@hakiko - [Действительно?] (http://3v4l.org/QfuJo) –

+0

@hakiko он прав, вы попадаете в старую ошибку «if this and for everything else». – cgTag

0

Из последнего else. Так как это "Category 1"$cid будет установлен как 1 при первом if состоянии, однако он будет сброшен, потому что это не "Category 3".

Вы должны использовать «elseif» вместо того, чтобы в этом случае конкатенировать многие «если».

1

Вы используете несколько операторов if, в то время как это должно быть только одно (else-if). Итак, сначала ваша переменная будет равна 1, но поскольку последний if-statement перезаписывает ее, вы получите неправильный ответ.

ли что-то вроде:

if ($game_cat === "Category 1") { 
     $cid = 1; 
} 
elseif ($game_cat === "Category 2") { 
     $cid = 2; 
} 
elseif ($game_cat === "Category 3") { 
     $cid = 0; 
} 
else{ 
     $cid = 999999; 
} 

Для получения дополнительной информации о ELSEIF, проверить http://php.net/manual/en/control-structures.elseif.php :)

+0

+ 1 Хорошее начало Jesz :) –

+0

не работает, все еще возвращается 999999 – hakiko

Смежные вопросы