Всем привет подскажите, никак не допру: вот простое выражение "true and false or false". получается оно в цикле true and false or false как получить итоговый результат?
and требует одновременно чтобы все были true or ничего не требует и хватит одного true после любого or
вот идет цикл $a.=true $a.=and $a.=false $a.=or $a.=false получилось $a=trueandfalseorfalse; надо вычислить выражение, что бы $a=false(результат); или true в зависимости что там будет.
коротко: цикл проходит таблицу, строку за строкой, сверяя нужную ячейку с заданными условиями, коих может быть от 1 до нескольких (3-5 штук). к примеру (Статус = Принято И Статус = Оплачен ИЛИ Статус = Отгружен) - это просто пример. Если находится совпадение с условием - возвращается true если нет false на выходе получается выше описанный массив ответов. В зависимости от конечного результата заданная ячейка подсвечивается заданным цветом.
на это вопрос там есть ответ - это просто пример.... так просто легче обдумывать, понятно что первое условие всегда будет false
Да нет, приоритет там правильный and вперед or выполняется. мне надо просто вычислить выражение Пример: полученные ответы 1 && 0 || 0 если вычислить это выражение получится 0 , так как 1&&0 равно 0 и 0||0 равно 0. но как это сделать на практике? да же так Код (Text): $ry='(1 && 0 || 0)'; eval("\$ry = \"$ry\";"); на выходе (1 && 0 || 0) то-есть, условные операторы воспринимаются как просто символы, а не как условные операторы. Постоянно натыкаюсь на проблему как вытащить оператор из (строки,базы,формы), такое ощущение что я просто не знаю "best way" для такой операции.
@oleg_ лучше опиши задачу которую хочешь решить, входящие данные, результат который хочешь получить, формат и структура данных
так я уже все описал, даже не знаю что добавить... еще раз: в цикле перебирается таблица, в ходе перебора, содержимое ячеек сравнивается с условием: (Статус = Принято И Статус = Оплачен ИЛИ Статус = Отгружен) если в ячейке "статус" встретится например "оплачен" то ответ будет 1. Но, условий 3 штуки...(Статус = Принято)--(Статус = Оплачен)--(Статус = Отгружен) соответственно ответов будет 3... и между ними еще условные операторы 0 (Статус = Принято) and И 1 (Статус = Оплачен) or ИЛИ 0 (Статус = Отгружен) надо вычислить результат из полученного выражения 0 and 1 or 0 если результат 0 ячейка не изменяется, если 1 подсвечивается.
Как три если И считается за один вариант, булева логика посмотри таблица для И true true = true false false = false true false = false false true = false --- Добавлено --- Вот тут вроде все таблички http://www.mir-koda.ru/full_leson.php?id=7
еще раз: $a. = 1 проход цикла - (сравнивает)-записываем 0 $a. = 2 проход цикла - "служебный" записываем and $a. = 3 проход цикла - (сравнивает)-записываем1 $a. = 4 проход цикла - "служебный" записываем or $a. = 5 проход цикла - (сравнивает)-записываем 0 на выходе $a= 0and1or0; - что можно с этим сделать?
Если я здесь (в дурке), значит у меня не все дома. Если я здесь, значит не все, сто пудово. А дома те, у кого все. Но рас меня нет, значит и у них не все...
Напиши парсер этого выражения и посчитай, просто очень странно зачем такое делать. Или так PHP: <?php eval('$r = ( 0 && 1 || 0);'); var_dump($r);
А зачем eval-ы?? PHP: var_dump(false && true || false); //bool(false) Логическое выражение это выражение же. Оно считается как выражение. Только операторы и операнды не как в математическом. И в БД логические флаги надо держать не в строковом представлении, а как BOOLEAN.
Код (Text): $r = ( 0 && 1 || 0) так оно и без eval работает а вот так Код (Text): $ry = '(0 && 1 || 1)'; eval('$r = $ry;'); уже не работает, а из цикла именно строка получается --- Добавлено --- хорошо бы так, но из цикла операторы приходят в виде строки... В этом и загвоздка, как из строки оператор получить --- Добавлено --- Код (Text): eval('$r = $ry;'); var_dump($r); string '1 and 0 or 0' (length=12)
Их не в строку надо записывать, а считать сразу --- Добавлено --- Как вариант массив значений: $arr = ['true' => true, 'false' => false];