blackdarthvader
@blackdarthvader
Только учусь кодить ^_^

Как вывести переменную за массив foreach?

Привет. Нужно найти переменную в массиве, потом сделать проверку на ее существовании

Массив такой
$good[spec] = array('mall', 'discount', 'promotion');


Делаю так
<?
foreach($good[spec] as $mall){
    if($mall == 'mall'){
        $rate_mall .= 'mall';
    }
}

if($rate_mall) {
        echo 'Yes';
    } else {
        echo 'No';
    }
?>


при выполнении этого кода у меня бесконечное множество выводится YES даже если $mall == 'mall' не существует. Где я допустил ошибку?
  • Вопрос задан
  • 175 просмотров
Решения вопроса 1
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Судя по всему вы циклом проходите по всем товарам?

Что такое spec? В вашем примере это константа, полагаю проблема именно в этом.

Вероятно, spec должна быть переменной:

$good[$spec] = array('mall', 'discount', 'promotion');
//    ^

foreach($good[$spec] as $mall) {
  //          ^
  // ...
}

---

UPD: Теория с константой оказалась ошибочной и в данном случае spec интерпретируется, как строковой литерал, однако так делать не рекомендуется:

php.net/manual/ru/language.types.array.php
Почему $foo[bar] неверно?

Всегда заключайте в кавычки строковый литерал в индексе ассоциативного массива. К примеру, пишите $foo['bar'], а не $foo[bar]. Но почему? Часто в старых скриптах можно встретить следующий синтаксис:

<?php
$foo[bar] = 'враг';
echo $foo[bar];
// и т.д.
?>

Это неверно, хотя и работает. Причина в том, что этот код содержит неопределенную константу (bar), а не строку ('bar' - обратите внимание на кавычки). Это работает, потому что PHP автоматически преобразует "голую строку" (не заключенную в кавычки строку, которая не соответствует ни одному из известных символов языка) в строку со значением этой "голой строки". Например, если константа с именем bar не определена, то PHP заменит bar на строку 'bar' и использует ее.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы