Сравнение строк ведет себя по-другому


$x = array(3) {
   [0]=>       "A - 1"
   [1]=>       "B - 4"
   ["Total"]=>     "5"
 }

ПОПРОБУЙТЕ:

foreach($x as $k=>$v){
   if($k=="Total"){break;}
    echo $v."<br>";
 }

Потому что я просто хочу вывести:

A - 1
B - 4

Но я ничего не вижу в выводе.

Что я не так делаю?

Спасибо

Author: codaddict, 2011-03-10

2 answers

Вы ничего не получаете на выходе, когда вы выходите из цикла в первый же раз.

На первой итерации $k со значением 0, которое является числовым, сравнивается с "Total", которое является строкой, и это сравнение возвращает true, потому что PHP преобразует строку "total" в число перед сравнением и "total" при преобразовании в число 0.

Идеон

Чтобы исправить это, не используйте ==, вместо этого используйте strcmp, который преобразует цифровые клавиши в строка перед сравнением или вы можете использовать ===, который проверяет тип, а также значение.

Идеон

 5
Author: codaddict, 2011-03-10 10:14:25

Поместите echo $v."<br>"; в оператор else......

 -1
Author: Shaun, 2011-03-10 10:00:38