2014-10-17 36 views
0

是否有PHP函數用於比較兩個字符串變量與第三個參數是比較運算符和返回布爾值。用於比較兩個變量的PHP函數?

實施例:

$string1 = "Foo"; 
$string2 = "Bar"; 
$result = php_function_for_comparing($string1, $string2, "=="); //return boolean 

預先感謝。

+3

直接比較它們很容易嗎? '$ result =($ string1 === $ string2)'。這種功能的原因是什麼? – Barry 2014-10-17 18:31:24

+0

我認爲他希望能夠通過閉包作爲第三個參數 – 2014-10-17 18:34:20

+2

不,在PHP中沒有這樣的函數。這是你需要編碼的東西。 – 2014-10-17 18:35:13

回答

0

要回答我的問題,我創建了一個簡單的函數,而不使用PHP eval()。

function variable_comparison($condition = "==", $var1, $var2 = false){ 
    if($condition == "is_empty") 
     return empty($var1); 
    else if($condition == "is_filled") 
     return !empty($var1); 
    else if($condition == "==") 
     return $var1 == $var2; 
    else if($condition == "!=") 
     return $var1 != $var2; 
    else if($condition == ">") 
     return $var1 > $var2; 
    else if($condition == "<") 
     return $var1 < $var2; 
    else if($condition == ">=") 
     return $var1 >= $var2; 
    else if($condition == "<=") 
     return $var1 <= $var2; 
    else if($condition == "in_array") 
     return in_array($var1, $var2); 
    else if($condition == "contains") 
     return strpos($var1, $var2); 
    else if($condition == "starts_with") 
     return substr($var1, 0, strlen($var2)) === $var2; 
    else if($condition == "ends_width"){ 
     $length = strlen($var2); 
     return !$length || substr($var1, - $length) === $var2; 
    }  
} 

當您編寫基本條件邏輯並將其保存爲sting時,此函數非常有用。

示例的有條件的邏輯串:

echo ($_POST["foo"] != $_POST["bar"]) ? $_POST["bar"] : "Default Value Here!"; 

但是,當然,你需要創建一個遞歸算法來評估字符串,並將其轉換爲PHP可讀的代碼:

$string_logic = "{if post_[foo]<!=>post_[bar]?post_[bar]:Defalut Value Here!}"; 

爲相同的結果。

0

那麼,你可能使用eval函數 - 但請注意,eval執行任何PHP代碼傳遞給它。所以你必須正確地驗證給予該方法的任何輸入!

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

$operator1 = "=="; 
$operator2 = "!="; 

$string1 = "'foo'"; //quote them for evaluation, or you receive syntax errors 
$string2 = "'bar'"; //quote them for evaluation, or you receive syntax errors 

if (eval("return ".$string1 . $operator1 . $string2.";")){ 
    echo "Equal!"; 
} 

if (eval("return ".$string1 . $operator2 . $string2.";")){ 
    echo "Different!"; 
} 

或不引述值之前:

$operator1 = "=="; 
$operator2 = "!="; 

$string1 = "foo"; 
$string2 = "bar"; 

//this passes the strings $string1 and $string2 - which will THEN 
//be evaluated to the values. 
if (eval('return $string1' . $operator1 . '$string2;')){ 
    echo "Equal!"; 
} 

if (eval('return $string1' . $operator2 . '$string2;')){ 
    echo "Different!"; 
} 
+0

謝謝你的建議,但我真的不同意使用eval()。它會工作,但除了安全問題之外,還很難對eval的字符串參數進行清理。 – 2014-10-17 20:08:49

-1

呀很多,你可以巧妙與他們使用他們作爲一個布爾

//Calculate the percentage of similarities 
similar_text ($first , $second, $percent) 

levenshtein($str1, $str2) //Calculate Levenshtein distance between two strings 

soundex($str) //Calculate the soundex key of a string 
+3

兩個人沒看過這個問題 – RiggsFolly 2014-10-17 18:38:05

+0

我看了這個問題。你問是否有一個PHP函數比較兩個字符串,然後返回布爾真或假,對嗎? – 2014-10-17 18:43:58

+0

不...再試一次。閱讀所有的單詞。處理所有單詞,然後嘗試回答 – RiggsFolly 2014-10-17 18:45:51

1

你可以使用eval。

function compare($a, $b, $op) { 
    return eval('return $a ' . $op . ' $b;'); 
} 
+0

小費:你不應該。 – Becojo 2014-10-17 18:47:41

+0

我同意不使用eval(),即使php.net也不鼓勵使用它。 – 2014-10-17 19:59:38