function convert_formula($formula, $formula_array) {
$callback = function($matches) use ($formula_array) {return $formula_array[(int) $matches[0]];};
$converted = preg_replace_callback("/[0-9]+/", $callback, $formula);
return eval("return $converted;");
}
$test_formula = '(3-1) * (3-10)';
$test_formula_array = array(323,67,82,56, 10 => 3);
echo convert_formula($test_formula, $test_formula_array);
Benötigt PHP 5.3. + Für Anon-Funktionen. Sie sollten zuerst das $ formula-Argument validieren, um sicherzustellen, dass es nur Zahlen und mathematische Symbole akzeptiert, bevor Sie es in der Funktion auswerten.
Edit: nur mit der Annahme, dass dies ein Werkzeug ist, um Studenten auf Mathematik zu unterweisen, und dass Sie bereits einen vordefinierten Satz von Formeln zu referenzieren ... als eval
ist eine der gefährlichsten Funktionen von PHP, Vielleicht möchten Sie diese Clientseite mit Javascript ausführen. Wenn Sie die Seite erstellen, erstellen Sie einfach ein Basis-JavaScript-Referenzarray mit allen möglichen Werten, die in der Formel verwendet werden. Auf diese Weise erstellt und löst der Client mit der eval-Funktion von javascript die Formel an ihrem Ende. Diese abschließende Bewertung wird dann an Ihren Server zurückgegeben, der dann die Bewertung validiert und eine endgültige "richtige/falsche" Antwort gibt. Nur ein Gedanke ...
sagen Sie, dass einer Ihrer Array-Schlüssel "(1 + 3 + 5 + 7-8) * 9" ist? – Mala
Warum ?????????????????? –
@Mala, sorry, hätte klarer sein müssen. Jede der Nummern ist ein Array-Schlüssel. – pistolshrimp