字符串之间的逻辑操作


Logical operations between strings

>假设你有一些字符串,我应该如何转换它们才能在PHP中使用逻辑运算?甚至可能吗?

示例:我想要

"x=1"&&"x=0"

返回false .

简介

我注意到您在字符串=中同时具有逻辑运算符&&和赋值运算符,并且您想评估字符串中具有逻辑运算符的赋值。 说真的,我不知道你是怎么来到这里的,但这very wrong但出于教育目的

故障

"x=1"  &&  "x=0" = False 
  ^    ^     ^
  |    |     | 
       |     |
X == 1 |     |
       |     |
      AND    |
             |
           X == 0

上面的表达式总是false的,因为X不能同时equal 01

为了能够在PHP中进行这样的计算,您需要编写自己的函数,例如logicalString您可以使用 logicalString("x=1")logicalString("x=0") 之类的东西来计算表达式

假设

$x = 1; // Imagine value of X 

示例 1 &&

// Start Evaluation with &&
if (logicalString("x=1") && logicalString("x=0")) {
    echo "&& - True'n";
} else {
    echo "&& - False'n";
}

产出 1

&& - False 

示例 2 - ||

// Start Evaluation with ||
if (logicalString("x=1") || logicalString("x=0")) {
    echo "|| - True'n";
} else {
    echo "|| - False'n";
}

产出2

|| - True

使用的功能(不用于生产,请参阅原因

function logicalString($str) {
    parse_str($str, $v);
    foreach ( $v as $k => $var ) {
        if (! isset($GLOBALS[$k]) || $GLOBALS[$k] != $var)
            return false;
    }
    return true;
}

查看 PHP 4.3.0 - 5.5.0alpha3 上的在线演示

有了给定的信息,让我解释一下发生了什么?

if("x=1"&&"x=0")
{
  echo "true";
}
else 
{
  echo "false";
}

它将输出

true

你试图实现的是徒劳的。字符串不是逻辑表达式,逻辑表达式由一个或多个逻辑运算符和逻辑、数字或关系操作数组成。阅读更多

上面的代码的作用与下面相同

if("string1" && "string2")
{
  echo "true";
}
else 
{
  echo "false";
}

只是它不关心里面有什么。它所关心的是有两个不为空的字符串。

if("" && "")
{
  echo "true";
}
else 
{
  echo "false";
}

以上将返回false .

结论

字符串

始终是字符串而不是逻辑运算符。

我认为完成任务的最佳方法是通过eval()方法使用自定义函数,如下所示:

<?php
function checkValues($var1, $var2) {
    if ($var1==1 && $var2==1) {
        echo "Both values are equal to 1";
    } else {
        echo "At least one value is not equal to 1";
    }
}
$x = 1;
$y = 1;
$z = 2;
$z3 = 1;
eval("checkValues($x, $y);"); // Both values are equal to 1
eval("checkValues($x, $z);"); // At least one value is not equal to 1
/* The eval parameter is a string so you can play with it.
 * Don't forget the semicolon ";";
 */
eval("checkValues($x, $z" . 3 . ");"); // Both values are equal to 1
?>

你可以使用这个:

//Returns True if strings are equal, false otherwise
(bool)!strcmp($str1, $str2);

将其包装在一个函数中,您就设置好了。