मुझे एक आवेदन में कुछ शर्तों को अद्यतन करने का काम सौंपा गया था। मेरे पास मूल्यांकन करने के लिए एक डेटा सेट है, और इसे निम्नलिखित तरीके से हार्ड-कोड किया गया है:
$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"))"
जहां [] सरणी कुंजियों की पहचान करेगा
या शायद एक्सेल में ऐसा कुछ
"AND(OR(IF('a'='orange'),IF('c'<4)),IF('g'='red'))"
क्या ऐसा करने का कोई साफ समाधान है? मेरे पास एक विचार है कि इसके लिए पूरे पुस्तकालय का निर्माण कैसे किया जाए, शायद भविष्य में।
मैं हर बार कोड में नई शर्तें नहीं जोड़ना चाहता। वे पहले से ही आवेदन भर में हैं। इसे कॉन्फ़िगरेशन में संग्रहीत करना और एक स्थान पर विस्तार या संशोधित करना बेहतर होगा।
किसी भी मदद की बहुत सराहना की।
eval()
।