2017-06-26 2 views
1

Ich habe die folgenden Code-Snippet, die eine Eingabe in einen Float und erstellen eine Variable maths Operator von > oder < basierend darauf, ob der Schwimmer eine positive oder negative Zahl ist.PHP dynamische mathematische Operator Ausgabe

// allow custom variance from user input 
if (isset($request->custom_variance)) { 
    $variance_amount = floatval($request->custom_variance); 
    ($variance_amount < 0) ? $operator = " < " : $operator = " > "; 
} else { 
    // set default 
    $variance_amount = floatval(-50); 
    $operator = " < "; 
} 

ich dann diese Variablen in einer if-Anweisung verwenden, habe ich hier abgeladen den Ausgang zu zeigen:

var_dump((floatval($value_one) - floatval($value_two)).$operator.$variance_amount); 
// returns "-51.35 < -50" 

Wenn ich hart Code die Werte, die ich diese bekommen (es funktioniert, wie ich einen Booleschen wollen)

var_dump((floatval($value_one) - floatval($value_two)) < -50); 
// returns true 

ich etwas zu lesen hier über das getan haben und es scheint, wie es nicht funktioniert wie mein Operator als wobei Zeichenfolge interpretiert wird, aber ich würde mit dem eval() f vermeiden möchten wenn möglich.

Irgendwelche Vorschläge?

Antwort

0

Sie können versuchen, mit dem eval() mit dem richtigen String-Ausdruck wie folgt mit Rückkehr Stichwort und ; und verwenden Sie dann wenn Bedingung wie Sie wünschen.

$result="return ((floatval($value_one)- floatval($value_two)).$operator.$variance_amount);"; 
    // returns true instead of "-51.35 < -50" 
    if(eval($result)){ 
    // do what ever you want to do 
    }