Guida alla progettazione di algoritmi ricorsivi (?)

1

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

    
posta tozjerimiah 26.09.2015 - 02:39
fonte

0 risposte

Leggi altre domande sui tag