2015-01-26 2 views
0

Я (истина) или (ложь), назначенный в строковой переменной, как:Вычислить строку

$chk="(true) or (false)";

Теперь я хотел бы, чтобы оценить строку, если строка будет оценивать истинным или ложным, как в нем выше должен возвращать false?

Например:

$chk1="(true) and (false)";

вернет ложь.

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

+2

Ленивый способ: 'eval'. Не-ленивый способ: узнать о грамматиках и парсерах и написать свой собственный. – georg

+0

Возможно, вам захочется рассмотреть другие способы хранения таких данных, например JSON. – tyteen4a03

ответ

1

Попробуйте исчерпывающий метод. Это просто.

$chk = "(false) or (false)"; 
preg_match('/\((true|false)\)\s(or|and)\s\((true|false)\)/i', $chk, $res); 
if (empty($res)) die('Error string!'); 
if (strtolower($res[1]) == 'true') $a = TRUE; 
if (strtolower($res[1]) == 'false') $a = FALSE; 
if (strtolower($res[3]) == 'true') $b = TRUE; 
if (strtolower($res[3]) == 'false') $b = FALSE; 
if (strtolower($res[2]) == 'or') var_dump($a or $b); 
if (strtolower($res[2]) == 'and') var_dump($a and $b); 

Улучшение некоторых.

+0

Можете ли вы хотя бы добавить подробные сведения об этом? – chridam

+0

@chridam. Вышеуказанный метод подразумевается в функции веб-приложения, в которой пользователь должен быть повышен до следующего уровня, проверяя, очистил ли он другие уровни. Пути к четкому уровню имеют сочетание логических фактов, подобных приведенным выше. – bipeen

+0

Спасибо за объяснение, это было бы очень полезно для других пользователей, если бы вы могли расширить это в своем ответе. – chridam

Смежные вопросы