Подскажите как выполнить условие в цикле один раз.

same_ivan

Гуру форума
Регистрация
1 Авг 2014
Сообщения
115
Реакции
67
Добрый день! Я не программист.. я дизайнер.

Есть цикл. В нем есть условие, если условие выполняется то для li я проставляю соответствующие классы.
Скажите пожалуйста, возможно ли выполнить условие которое внутри цикла - один раз. Мне это надо для того чтоб присвоить класс только первой li.
Собственно так это выглядит:

PHP:
        foreach ($this->getItemsAsArray() as $item){
            $check = $item['label'];
            if (preg_match("/^[A-Z]+$/", $check)) {$bingo = 'eng-sym';}
            else if (preg_match("/^[А-Я]+$/", $check)) {$bingo = 'rus-sym';}
            else {$bingo = 'other-sym';}
            echo '<li'.$item['style'].' class="'.$bingo.' cells"><a class="'.$item['css'].'" href="'.$item['url'].'">'. $item['label'] . '</a>' . $item['count'] . '</li>';
        }
 
Очень сильно сомнительно выглядит ваш код, но в данном случае можете просто задать какой то флаг, $flag = true;
И потом при первой замене, сделайте его flase;
В итоге проверка if($flag){} поможет вам определить был ли изменен ваш код или ещё нет.
 
Очень сильно сомнительно выглядит ваш код, но в данном случае можете просто задать какой то флаг, $flag = true;
И потом при первой замене, сделайте его flase;
В итоге проверка if($flag){} поможет вам определить был ли изменен ваш код или ещё нет.
спасибо, а подскажите в чем сомнителен мой код? какие могут быть проблемы?
 
Я вижу, что вы здесь и классы и вывод всё в одно намешали, нарушив все приципы ООП :)
Почему бы не вынести в отдельный метод определение языка, ведь оно может потребоваться где-нибудь ещё позже?
Почему бы не записывать в переменную то, что вы сразу хотите вывести на экран? А если в другом месте потребуется вывести этот список, вы второй и третий раз будете дублировать код? Не лучше ли сейчас потратить чуть-чуть больше времени, и грамотно и красиво всё оформить, чтобы потом сэкономить себе массу времени?
$this->list .= "<li {$item['style']} class='{$bingo} cells'><a class='{$item['css']}' href='{$item['url']}'>{$item['label']}</a>{$item['count']}</li>";
Наверняка было сложно со всеми эти конкатенациями разобраться и нигде не напутать? Я вот кавычки просто сменил и уже легче.
А в принципе можно и heredoc синтаксис использовать для таких дел. Это как двойные кавычки, без двойных кавычек :)
Если вы используете ООП - используйте все её хорошие стороны. Вот я в свойство list принадлежащее классу в котором мы сейчас находимся присвоил значение строки. Обратите внимание на точку перед равно - мы склеиваем все результаты foreach и у нас получится одна строковая переменная со всем списком.
Затем, внутри этого класса, где нам нужно мы просто сделаем echo $this->list; и получим всё то же самое. Но теперь, этот код готов для повторного использования, и более того, если мы вставим кучу таких вот вызовов в проекте, а потом вам надо будет что-нибудь поменять, мы изменив всего в одном месте кода изменим во всём проекте.
Ещё более гибко можно было бы сделать метод printList() в котором пока вы бы просто делали echo $this->list, а в самом проекте выводили бы $this->printList(); Захотите позже что-нибудь менять, дописать и прочее? Нет необходимости по всему проекту лезть, просто в методе замену сделали, и при необходимости в цикле. То есть любое изменение в максимум 2х местах.
Если хотите чтобы я вам подсказал и возможно показал код, хотя я более чем уверен, что если вы дошли до этого момента, вы и сами разберетесь, но всё же, можете скинуть класс, в котором вы работаете. Конечно улучшать можно до бесконечности, нет предела, пойти дальше - использовать паттерны проектирования и прочее, но думаю такой задачи пока не стоит :)
Поэтому код в принципе не плохой, но для очень маленького проекта, где вы точно 1 раз его используете, и не будете менять :)
 
Используйте счетчик $i объявленный до цикла

$i = 0;
foreach ($this->getItemsAsArray() as $item){$check = $item['label'];
if (preg_match("/^[A-Z]+$/", $check)) {$bingo = 'eng-sym';}
else if (preg_match("/^[А-Я]+$/", $check) && $i == 0) {
$bingo = 'rus-sym';
$i++
}
else {$bingo = 'other-sym';}
echo '<li'.$item['style'].' class="'.$bingo.' cells"><a class="'.$item['css'].'" href="'.$item['url'].'">'. $item['label'] . '</a>' . $item['count'] . '</li>';
}
 
Тут можно убрать просто foreach(), так:
PHP:
$item = each( $this->getItemsAsArray() );

$check = $item['label'];
if (preg_match("/^[A-Z]+$/", $check)) {$bingo = 'eng-sym';}
    else if (preg_match("/^[А-Я]+$/", $check)) {$bingo = 'rus-sym';}
        else {$bingo = 'other-sym';}

echo '<li'.$item['style'].' class="'.$bingo.' cells"><a class="'.$item['css'].'" href="'.$item['url'].'">'. $item['label'] . '</a>' . $item['count'] . '</li>';
 
Последнее редактирование:
Назад
Сверху