Mi è stato assegnato il compito di aggiornare alcune condizioni in un'applicazione. Ho un set di dati da valutare ed è stato codificato nell'applicazione nel modo 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 luoghi.
Quello che sto essenzialmente cercando è di fare un modo per passare la stringa di query per valutare i dati. Per iniziare una semplice formula 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 quindi potrebbe essere esteso e chiamato in modo ricorsivo
$formula = [['a','=','apple'], 'AND', ['e','<','10']]
ma quello che sto essenzialmente cercando è memorizzare formule come stringhe, come:
"((([a]="orange") OR ([c]<"4")) AND ([g]="red"))"
dove [] identificherebbe le chiavi dell'array
o forse qualcosa del genere in Excel
"AND(OR(IF('a'='orange'),IF('c'<4)),IF('g'='red'))"
C'è qualche soluzione pulita per farlo? Ho un'idea di come costruire un'intera libreria per questo, forse in futuro.
Non voglio aggiungere nuove condizioni al codice ogni volta. Sono già in tutta l'applicazione. Sarebbe meglio memorizzarlo nella configurazione ed estenderlo o modificarlo in un unico posto.
Qualsiasi aiuto molto apprezzato.
eval().