Ho l'obbligo di consentire ai miei utenti finali di inserire una formula simile a un foglio di calcolo. Ho una matrice come questa:
$table = array(
1=>array(
"id"=>1,
"Name"=>"Regulating",
"Quantity"=>"[2]Quantity+[3]Value",
"Value"=>"[2]Cost"
),
...)
La chiave dell'array di primo livello è sempre lo stesso valore della chiave id di quell'array.
Segue un esempio tabulato:
id Name Quantity Value
1 Regulating [2]Quantity+[3]Value [2]Cost
2 Kerbs 3 6
3 Bricks 9 7
4 Sausages [3]Cost 3
5 Bamboo [4]Quantity [7]Cost
6 Clams [4]Quantity NULL
7 Hardcore [3]Quantity*0.5 12
8 Beetles [6]Quantity*[4]Value [2]Value
Le chiavi Quantità e Valore rappresentano la formula che fa riferimento a [id] e a Quantità, Valore o Costo.
Il costo viene calcolato moltiplicando il valore e la quantità.
Sto usando:
%codice%
che emette un array in questo modo per preg_match_all("/\[(.*?)\]([A-Z]*[a-z]*)/", $string, $matches, PREG_SET_ORDER);
:
Array
(
[0] => Array
(
[0] => [2]Quantity
[1] => 2
[2] => Quantity
)
[1] => Array
(
[0] => [3]Value
[1] => 3
[2] => Value
)
)
Iterare attraverso la tabella usando qualcosa di simile a:
[1][Quantity]
foreach ($matches as $match) {
$calcString = str_replace($match[0], $table[$match[1]][$match[2]], $calcString);
}
Posso ottenere la stringa da calcolare e sto usando una classe matheval per fare la somma.
Ma ecco il mio problema
Ho bisogno di risolvere i riferimenti ad altre parti della tabella (che possono o non possono essere formule) per riempire gli spazi vuoti. Questo è al di fuori della mia zona di comfort e gradirei qualsiasi consiglio (o anche un codice funzionale migliore) che fornisca l'illuminazione su come potrei essere in grado di raggiungere questo obiettivo.
Grazie