ฉันได้รับมอบหมายให้อัปเดตเงื่อนไขบางอย่างในแอปพลิเคชัน ฉันมีชุดข้อมูลที่จะทำการประเมินและมันได้รับการกำหนดค่าตายตัวในแอปพลิเคชันด้วยวิธีต่อไปนี้:
$arr = array(
'a' => 'apple',
'b' => 'orange',
'c' => 1,
'd' => 2,
'e' => 5,
'f' => 'green',
'g' => 'red',
'h' => 'yellow',
)
$res1 = ($arr['a'] == 'apple') ? TRUE : FALSE;
$res2 = (($arr['b'] == $arr['f']) && ($arr['c'] < $arr['d']) ? TRUE : FALSE;
$res3 = (($arr['e'] == '5') && $res2) ?TRUE : FALSE;
และอื่น ๆ ...
มันเป็นฝันร้ายที่ต้องดูแลในหลาย ๆ ที่
สิ่งที่ฉันกำลังมองหาคือการหาวิธีการส่งผ่านสตริงการสืบค้นเพื่อประเมินข้อมูล สำหรับการเริ่มต้นสามารถกำหนดสูตรง่าย ๆ เป็นอาร์เรย์ได้
$formula = ['a', '=', 'apple'];
function query($formula, $arr) {
switch ($formula[1]) {
case '=':
return ($arr[$formula[0]] == $formula[2]);
case '!=':
return ($arr[$formula[0]]!= $formula[2]);
case '>':
return ($arr[$formula[0]] > $formula[2]);
case '<':
return ($arr[$formula[0]] == $formula[2]);
}
}
สิ่งนี้สามารถขยายและเรียกซ้ำได้
$formula = [['a','=','apple'], 'AND', ['e','<','10']]
แต่สิ่งที่ฉันกำลังมองหาคือการจัดเก็บสูตรสตริงสตริงเช่น:
"((([a]="orange") OR ([c]<"4")) AND ([g]="red"))"
โดยที่ [] จะระบุคีย์อาเรย์
หรืออาจเป็นสิ่งที่ชอบใน Excel
"AND(OR(IF('a'='orange'),IF('c'<4)),IF('g'='red'))"
มีวิธีใดที่สะอาดในการทำเช่นนี้? ฉันมีความคิดวิธีสร้างห้องสมุดทั้งหมดสำหรับมันอาจจะในอนาคต
ฉันไม่ต้องการเพิ่มเงื่อนไขใหม่ในรหัสทุกครั้ง พวกเขามีอยู่แล้วทั่วทั้งแอปพลิเคชัน มันจะดีกว่าที่จะเก็บไว้ในการกำหนดค่าและขยายหรือแก้ไขในที่เดียว
ความช่วยเหลือใด ๆ ที่ชื่นชมมาก
eval()
ข้อเสนอ