foreach выводит лишний элемент [дубликат]

338
18 сентября 2017, 05:09

На данный вопрос уже ответили:

  • неожиданное поведение php 3 ответа

Добрый день! Подскажите почему цикл выводил 1 лишний элемент

$arr = array("name" => "Маша","name2" => "Паша","Генадий","Валера", "кофе", 
"чай","8 утра");
foreach($arr as $key => $elem){
if($key == "name"){
    echo $key." ".$elem . "<br>";
}

}

выводит: name Маша 0 Генадий

Answer 1

В случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа. Эти правила также распространяются на оператор switch. Преобразование типов не происходит при использовании === или !== так как в этом случае кроме самих значений сравниваются еще и типы.

Поэтому

  var_dump(0 == "a"); // 0 == 0 -> true
    var_dump("1" == "01"); // 1 == 1 -> true
    var_dump("10" == "1e1"); // 10 == 10 -> true
    var_dump(100 == "1e2"); // 100 == 100 -> true

В вашем случае произошло сравнение 0 == 'name'

READ ALSO
Yii2 Как в AccessControl добавить &#39;register&#39; в access?

Yii2 Как в AccessControl добавить 'register' в access?

В backend нужно сделать регистрацию только для админа и контент-менеджераСейчас при попытке пройти по ссылке: 'регистрация нового пользователя'...

752
PHP не работает проверка [требует правки]

PHP не работает проверка [требует правки]

Подскажите пожалуйста почему не работает проверкаОтправляет даже пустые значения

207
Свой генератор псевдослучайных чисел [требует правки]

Свой генератор псевдослучайных чисел [требует правки]

Нужно создать свой генератор псевдослучайных чисел на PHP, который при использовании числа (сида), выдаст от 0 до 65280 (включительно) вот такие...

298
Сравнение двух массивов в PHP

Сравнение двух массивов в PHP

Делаю интернет-магазин контактных линзЗастрял на реализации функции добавления товара в корзину с РАЗЛИЧАЮЩИМИСЯ опциями, должно быть как...

465