[英]How to create dynamic IF statements without using 'eval' in PHP?
我想使用來自數據庫的一些選項在PHP中構建IF語句。
假設我從數據庫中得到了一個這樣的數組:
$db = [
'number1' => [
'<= 5',
'&&'
],
'number2' => [
'> 200',
'&&'
],
'number3' => [
'= 1',
'||'
],
'number3' => [
'= 2',
'||'
],
];
我想將其翻譯成:
if ($data['number1'] <= 5 &&
$data['number2'] > 200 &&
($data['number3'] == 1 ||
$data['number3'] == 2
)) {
// do something
}
當然,我會先做一個foreach並將該數組的KEY放入$data['']
數組中。 但是,我不確定如何將邏輯運算符和所有其他內容放置到位。
有人可以給我一個主意嗎?
最好對來自MySQL或任何用戶產生的數據的數據進行清理,而不要使用eval()
。 對於您的情況,我建議將您的數據分為:
然后將其與現有的進行比較,然后使用它。 首先,您可以執行以下操作:
if ($operator == ">=")
if ($operand >= $value)
或類似的遞歸構建-這是關鍵。 希望這可以幫助。
好吧,聽起來很奇怪,但是我嘗試了一些小代碼示例: https : //3v4l.org/h21gv
<?php
$arr = [
'number1' => [
'value' => 2,
'comparator' => '<=',
'compareTo' => 5,
'next' => '&&'
],
'number2' => [
'value' => 230,
'comparator' => '>',
'compareTo' => 200,
'next' => '&&'
],
'number3' => [
'value' => 1,
'comparator' => '==',
'compareTo' => 1,
'next' => '||'
],
'number3' => [
'value' => 2,
'comparator' => '==',
'compareTo' => 2,
'next' => '||'
],
];
function comparator(array $ar) {
$i = 0;
$m = count($ar);
$last = true;
foreach ($ar as $compare) {
$i++;
switch($compare['comparator']) {
case '<=':
$bool = $compare['value'] <= $compare['compareTo'];
break;
case '>':
$bool = $compare['value'] > $compare['compareTo'];
break;
case '==':
$bool = $compare['value'] == $compare['compareTo'];
break;
}
if ($i < $m) {
switch($compare['next']) {
case '||':
$last = $last || $bool;
break;
case '&&':
$last = $last && $bool;
break;
}
}
}
return $last;
}
var_dump(comparator($arr));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.