2017-09-20 2 views
0

Ich versuche Ausdruck in Variablen zu speichern und sie dann in array_filter verwenden, um Daten auf diesen Wert zurück basierend zum Beispielspeichern Ausdruck in Variable PHP

$condition = '== 100'; 

    $test = array_filter($last,function ($data)use ($condition){ 
      return $data['rating'] .$condition; 
    }); 

var_dump($test); 

Ich versuchte html_entity_decode($condition, ENT_QUOTES);preg_replace()str_replace() sowie trim zu verwenden um die einfachen Anführungszeichen zu entfernen, aber es hat nicht funktioniert

Ich habe viele Bedingungen und ich möchte nicht schreiben array_filter viele Male gibt es eine Möglichkeit, dies zu tun? oder besser als die, die ich versuche zu erreichen.

+0

Zeigen Sie, was Sie ausprobiert haben. Was meinst du mit "nichts funktioniert"? Bitte teilen Sie ein Code-Snippet über, sagen wir, http://ideone.com oder https://3v4l.org/ –

+2

"etwas wie das". Was bedeutet das? Es ist nicht sofort klar aus dem Code, was Ihr eigentliches Ziel ist. Wo kommen preg_replace und str_replace rein? Zeigen Sie, was Sie versucht haben, und erklären Sie, was gescheitert ist. Sei dir darüber klar, was du erreichen willst. Verwenden Sie Beispiele für Eingabe und erwartete Ausgabe, wenn dies einfacher ist. Die Frage ist derzeit sehr unklar. – ADyson

+1

http://php.net/manual/en/function.eval.php – Devon

Antwort

0

Ich nahm an, dass Sie eine begrenzte Anzahl von Vergleichsoperatoren haben, die Sie in Betracht ziehen. Aus Gründen der Einfachheit nummerierte ich sie 0,1,2,.... Sie löst verschiedene Arten von Vergleichen innerhalb Ihres Filtercallback-Funktion:

funcion myfiltarr($arr,$operator,$value){ 
    $test = array_filter($last,function ($data) use ($operator, $value){ 
    $v=$data['rating']; 
    switch($operator) { 
     case 0: return $v == $value; 
     case 1: return $v < $value; 
     case 2: return $v > $value; 
     case 9: return preg_match($value,$v); 
     // to be extended ... 
     default: return true; 
    } 
    }); 
    return $test 
} 

$test=myfiltarr($last,0,100);  // test: "== 100" 
var_dump($test); 

$test=myfiltarr($last,9,'/^abc/'); // test: "match against /^abc/" 
var_dump($test); 

Edit: Ich erweiterte die ursprüngliche Antwort durch eine preg_match() Option (Vergleichscode: 9). Diese Option interpretiert die angegebene $value als regulären Ausdruck.

+0

Nizza, da gibt es keine andere Möglichkeit, es zu tun. Vielen Dank –