Задать вопрос
@amazinginternetsites

Как оформить уровни вложенности в условии?

Здравствуйте, есть следующее сложное условие со вложенностями:

((($data['lr1rt'] != 1) || ($data['lr1rt'] != 2) || ($data['lr1rt'] != 3)) 
&& ($data['lr1g'] != 2)) ? (($data['lr1rt'] != 4) ? (($data['lr1rt'] != 5) ? 0 : 5) : 4) : 1;


Хотелось бы чтобы значение "1" выводилось только при условии, когда
((($data['lr1rt'] == 1) || ($data['lr1rt'] == 2) || ($data['lr1rt'] == 3)) && ($data['lr1g'] == 2))

Но проблема в том, что "1" выводится при всех условиях если ($data['lr1g'] == 2)

Спасибо
  • Вопрос задан
  • 2299 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
FanatPHP
@FanatPHP
Чебуратор тега РНР
Ничего не могу ответить - при взгляде на этот код мои глаза стали кровоточить.

Но похожий случай был на Оклахомщине
Ты, я так понимаю, из операторов сравнения знаешь только "равно" и "не равно" ? Когда проходили "больше"-"меньше" ты болел?
Ответ написан
thewind
@thewind
php программист, front / backend developer
Откройте для себя in_array вместо кучи == || == || ==
Ответ написан
Комментировать
shaks
@shaks
Бро, честно признаюсь, минут 5 втыкал в твои условия. Краткая форма записи условия if-else служит для упрощения визуального восприятия кода, у тебя же получилось с точностью наоборот.
Не нужно городить трехэтажную краткую форму записи условия.
Собственно, как подсказал Дмитрий вот вариант на проверку вхождения в массив. Я не знаю правильно ли я расшифровал твой, можно смело сказать, - обфусцированный код, но собственно воть:
<?php

$conditions = array( # условия вхождения N в один из значений массива. Ключом массива является возвращаемый результат если условие истинно..
    0=> array(1, 2, 3), // Если твой data[lr1rt] равен 1, 2 или 3. то вернется ноль.
    5=> array(4,5,6),
    4=> array(7,8,9,10)
);

for($data['lr1rt']=0; $data['lr1rt']<=10; $data['lr1rt']++) // Цикл для теста влепил. Он тебе не нужен )
{

    $result = 1; #если не подошло ни одно из условий
    foreach($conditions as $res => $cond) // Пробегаемся по массиву
    {
        if(in_array($data['lr1rt'], $cond)) // ищим вхождение
        {
            $result = $res;
            break; // если вхождение нашли, выходим из ближайшего цикла (в данном случае это foreach
        }
    }
    echo "lr1rt: {$data['lr1rt']} | $result\n";
}
/*
Результат работы при текущих "настройках"
lr1rt: 0 | 1
lr1rt: 1 | 0
lr1rt: 2 | 0
lr1rt: 3 | 0
lr1rt: 4 | 5
lr1rt: 5 | 5
lr1rt: 6 | 5
lr1rt: 7 | 4
lr1rt: 8 | 4
lr1rt: 9 | 4
lr1rt: 10 | 4

*/
Ответ написан
@maxyc_webber
Web-программист
Побуду некромантом. но открыл для себя шаблон Спецификация https://maxyc.ru/programming/pattern-specification/
очень удобно
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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