не считая ужасного синтаксиса, что именно вас тут смущает?
Лучший совет в теме :)
Ага, вот только не понятно почему это проще/правильней, чем assert()? 🍿
$x = "$price > 10 && $country == 'Китай' && $material == 'шёлк'";replacement[$var_name] = (assert($x)) ? 'строка' : '';
Мне же не втупую кусок рабочего кода скопировать хочется, а понять логику почему здоровенная конструкция с вложенными циклами - лучше, чем дефолтная функция, которая даёт нужный результат...
А то, что стиль, который я запостил и который вы продемонстрировали на скриншоте в окружении рекламы с пиписьками, мягко говоря, различаются, вас не смущает? :)
Ну тогда я сдаюсь...
Не выбирается товар из БД. Он есть уже у нас "на руках", мы с ним работаем, с конкретно его характеристиками, с его описанием.
Мудрёно :) Ща буду курить :)
Мне только AND надо, OR не будет.
И можно отбросив первую часть, т.к. весь набор %переменных% известен заранее, нужно просто определиться с заменой - "строка" или "пусто".
какой?
10 символов.
Конечно же всё в БД.
Вы подстроились под буквальное, упрощённое условие из примера. Конечно, если просто взять условие с $price из примера, то предложенный вами способ - прост и очевиден.
Окей, давайте я попробую переформулировать ещё раз...
Есть товар - "Труселя, артикул 123456", его набор характеристик:
$price =12;
$coutry = 'Китай';
$size = '7xl';
$color = 'красный';
$material = 'шёлк';
$quantity = 12;
Переменная, которую определил контентщик:
%premium% = "Шикарные труселя из нежнейшего шёлка, сотканного лучшими восточными мастерами, тысячелетиями хранящими и передающими свои секреты.".
%limited% = "Премиальная коллекция, лимитированная серия."
Условия переменной:
%premium% - ($coutry == 'Китай' && $price > 10 && $material == 'шёлк')
%limited% - ($price > 10 && $quantity < 10)
-------------------------------
Формула:
Рады представить вам новую коллецию! %premium% Трусы разработаны лучшими немецкими инженерами, обладают эффектом памяти и учитывают индивидуальные особенности владельца. %limited% Страна производства - <?=$country?>
Если условие для %premium% = true, в описании трусов появляется заданная строка.
%limited% с имеющимся набором характеристик - false, поэтому в примере не подставляется.
Получаем на выходе:
Рады представить вам новую коллецию! Шикарные труселя из нежнейшего шёлка, сотканного лучшими восточными мастерами, тысячелетиями хранящими и передающими свои секреты. Трусы разработаны лучшими немецкими инженерами, обладают эффектом памяти и учитывают индивидуальные особенности владельца. Страна производства - Китай.
проблема не в характеристиках, а в том, как хранить условия для подстановок. В примере это:
А если в условии переменных не 2-3, а десяток? Это офигенно громоздкий цикл с if-else получается.
Выше предложили рабочее решение с eval, но eval тут реально не оправданно избыточен.
Но ведь можно же использовать assert($x), где $x - это прям строка условия?
Вы про какую фильтрацию? Где и что фильтруется?
<html> <head> <meta charset="utf-8"> <style> ul { padding: 0; text-align: justify; -moz-text-align-last: justify; text-align-last: justify; background: #f2f2f2; } li { display: -moz-inline-stack; display: inline-block; *display: inline; } </style> </head> <body> <ul> <li>Главная</li> <li>Новости</li> <li>Товар</li> <li>Контакты</li> </ul> </body> </html>