Mi è stato chiesto di aggiornare alcune condizioni in un'applicazione. Ho un set di dati da valutare, ed è stato hardcoded nell'applicazione seguente:
$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;
e così via ...
È un incubo da mantenere in molti posti.
Quello che sto cercando essenzialmente è di fare in modo di passare in stringa di query per valutare i dati. Per iniziare una formula semplice potrebbe essere definita come una matrice
$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]);
}
}
Questo potrebbe quindi essere esteso e chiamato in modo ricorsivo
$formula = [['a','=','apple'], 'AND', ['e','<','10']]
ma quello che sto cercando essenzialmente è di memorizzare le formule a una stringa, come:
"((([a]="orange") OR ([c]<"4")) AND ([g]="red"))"
dove [] identificherà i tasti dell'array
o forse qualcosa di simile in Excel
"AND(OR(IF('a'='orange'),IF('c'<4)),IF('g'='red'))"
C'è qualche soluzione pulita per fare questo? Ho un'idea di come creare un'intera libreria per questo, forse in futuro.
Non voglio aggiungere nuove condizioni al codice ogni volta. Sono già in tutto l'applicazione. Sarebbe meglio memorizzarlo nella configurazione ed estenderlo o modificarlo in un unico posto.
Qualsiasi aiuto molto apprezzato.