2014-10-17 4 views
0

Есть ли какая-либо функция PHP для сравнения двух строковых переменных с третьим параметром, являются операторами сравнения и возвращаются логические.Функция PHP для сравнения двух переменных?

Пример:

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

Заранее спасибо.

+3

Сравнивая их напрямую, нужно легко? '$ result = ($ string1 === $ string2)'. В чем причина такой функции? – Barry

+0

Я предполагаю, что он хочет, чтобы иметь возможность пройти закрытие в качестве третьего аргумента –

+2

Нет, такой функции в PHP нет. Это то, что вам нужно, чтобы закодировать себя. –

ответ

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; 
    }  
} 

Эта функция очень полезна, когда вы пишете основную условную логику и сохраняете ее как жало.

Пример условной логики строка:

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

Тот же результат, как:

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

Но, конечно, нужно создать рекурсивный алгоритм для оценки строку и преобразовать его в PHP читаемый код.

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. –

-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

+0

Я прочитал вопрос. Вы спрашиваете, есть ли функция php, которая сравнивает две строки, а затем возвращает логическое значение true или false, Right? –

+0

Нет ... Попробуйте еще раз. Прочтите все слова. Обработайте все слова, затем попробуйте ответить – RiggsFolly

1

Вы могли бы использовать eval.

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

совет: вы не должны. – Becojo

+0

Я согласен не использовать eval(), даже php.net не поощряет его использование. –

Смежные вопросы