Значение переменной в качестве условия IF (PHP)

1 23
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#21

У этого проекта нет БД, всё на файлах?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
toxic steel
На сайте с 28.12.2007
Offline
175
#22

Конечно же всё в БД.

Есть отличные, недорогие рекламные места на агрофоруме (http://farmerforum.ru/viewtopic.php?t=1725)! Клуб истинных ценителей денег (http://coinshunter.ru/).
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#23
toxic steel:
Конечно же всё в БД.

А почему тогда запрос к БД не сделать?

toxic steel
На сайте с 28.12.2007
Offline
175
#24

какой?

10 символов.

totamon
На сайте с 12.05.2007
Offline
437
#25
LEOnidUKG:
А почему тогда запрос к БД не сделать?
toxic steel:
какой?

я выше про это и писал, товар по условию выводится из БД обычно, в вашем описании я не увидел и не понимаю тоже что вы через IF проверяете и выводите?

Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
MK
На сайте с 18.08.2005
Offline
126
#26

30 минут размялся

как вариант:



$data['price'] = 11;
$data['quantity'] = 9;
$data['material'] = "шёлк";
$data['coutry'] = "Китай";

#условия
$a['premium'] = 'coutry == Китай && price > 10 && material == шёлк';
$a['limited'] = 'price > 8 && quantity < 10';

$b['premium'] = '<b>premium</b>';
$b['limited'] = '<b>limited</b>';


$lgc['&&'] = '&';
$lgc['||'] = '|';
$lgc['AND'] = '&';

$t = '
Рады представить вам новую коллецию! %premium% Трусы разработаны лучшими немецкими инженерами, обладают эффектом памяти и учитывают индивидуальные особенности владельца. %limited%';

preg_match_all('#%([a-z0-9]+)%#u', $t, $m);

function _cmpr($k, $logic, $v, $data) {
if(!isset($data[$k])) return null;
echo "<b>$k , {$data[$k]} $logic $v</b><br>" ;
switch ($logic) {
case '>':
return ($data[$k] > $v);
break;

case '<':
return ($data[$k] < $v);
break;

case '==':
return ($data[$k] == $v);
break;
}
return 0;
}

if(!empty($m[1])) {

foreach($m[1] as $itm) {
if(!empty($a[$itm])) {
$a[$itm] = '& '. strtr($a[$itm], $lgc);
preg_match_all('#(&|\|)([^&\|]*)#u', $a[$itm], $mm);

if(!empty($mm[1])) {

foreach($mm[1] as $key=>$val) {

if(!empty($mm[2][$key])) {
echo "<h5>{$val} если логика OR то чуть доработать в плане группировки</h5>";
$val = trim($val);
$mm[2][$key] = trim($mm[2][$key]);
preg_match_all('#(.+)(==|>|<)(.+)#u', $mm[2][$key], $mmm);
if(isset($mmm[3]) && !empty($mmm[3][0]))
$re = _cmpr(trim($mmm[1][0]), $mmm[2][0], trim($mmm[3][0]), $data) ? (isset($re) ? $re : 1) : 0;
}
}
$s = isset($re) && $re ? $b[$itm] : '';
$t = str_replace('%'.$itm.'%', $s, $t);
echo $re, ' ', $a[$itm], '<br>';
}

}
unset($re);
}

}
echo '<hr>', $t;

Только над групприровкой OR и AND условий подумать 😕

---------- Добавлено 24.04.2018 в 14:56 ----------

А почему тогда запрос к БД не сделать?

Вероятно, для вывода шаблонного куска с целью уникализации карточки например. Ну, я так понял;)

нет
toxic steel
На сайте с 28.12.2007
Offline
175
#27
totamon:
в вашем описании я не увидел и не понимаю тоже что вы через IF проверяете и выводите?

Ну тогда я сдаюсь...

Не выбирается товар из БД. Он есть уже у нас "на руках", мы с ним работаем, с конкретно его характеристиками, с его описанием.

30 минут размялся

Мудрёно :) Ща буду курить :)

над групприровкой OR и AND условий подумать

Мне только AND надо, OR не будет.

И можно отбросив первую часть, т.к. весь набор %переменных% известен заранее, нужно просто определиться с заменой - "строка" или "пусто".

MK
На сайте с 18.08.2005
Offline
126
#28
Мудрёно

Да не.. Ищем все %ххх% в шаблоне, перебираем, если есть на ххх условие ($a), разбираем его по &.

Перебираем итог, выдергиваем (preg_match_all('#(.+)(==|>|<)(.+)#u', $mm[2][$key], $mmm);) ключ параметра ($mmm[1][0]), логику $mmm[2][0] (>,< или ==), значение ($mmm[3][0]) и отдаем вместе с массивом параметров товара ($data) _cmpr($k, $logic, $v, $data) для сравнения...

если итоговый $re тру , то заменяем в тексте ($t) %xxx% на $b['xxx']. Все ;)

Мне только AND надо, OR не будет.

Тогда все упрощается. Если только какие проверки добавить...

toxic steel
На сайте с 28.12.2007
Offline
175
#29
Marat_Kh:
Ищем все %ххх% в шаблоне, перебираем, если есть на ххх условие ($a), разбираем его по &.
Перебираем итог, выдергиваем (preg_match_all('#(.+)(==|>|<)(.+)#u', $mm[2][$key], $mmm);) ключ параметра ($mmm[1][0]), логику $mmm[2][0] (>,< или ==), значение ($mmm[3][0]) и отдаем вместе с массивом параметров товара ($data) _cmpr($k, $logic, $v, $data) для сравнения...
если итоговый $re тру , то заменяем в тексте ($t) %xxx% на $b['xxx']. Все ;)

Ага, вот только не понятно почему это проще/правильней, чем assert()? 🍿


$x = "$price > 10 && $country == 'Китай' && $material == 'шёлк'";

replacement[$var_name] = (assert($x)) ? 'строка' : '';


Мне же не втупую кусок рабочего кода скопировать хочется, а понять логику почему здоровенная конструкция с вложенными циклами - лучше, чем дефолтная функция, которая даёт нужный результат...

MK
На сайте с 18.08.2005
Offline
126
#30
Ага, вот только не понятно почему это проще/правильней, чем assert()?

Если, что то типа:

$dd = " file_put_contents( '{$bbbb}' , '<?php ..... ?>' ) "; 

echo assert($dd) ? 1:0;

исключено, то можно и assert. Хозяин - барин. Мне просто евал и ассерт не нравятся 🍿

И, тогда, eval как вариант. Может быть даже и лучше, с учетом изменений ассерт в пхп 7.х. 😂

Внимание
Использование значения типа string в параметре assertion объявлено УСТАРЕВШИМ с PHP 7.2.

Суть то у этих функций пока одна - выполнение интерпретатором кода в переданной строке.

1 23

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий