2

假设您有一些字符串,我应该如何转换它们以便能够在 PHP 中对它们使用逻辑操作?甚至可能吗?

例:我想要

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

返回false

4

4 回答 4

6

介绍

我注意到您在字符串中同时具有逻辑运算符 &&赋值运算符=,并且您想要评估在字符串中具有逻辑运算符的赋值。说真的,我不知道你是怎么到这里的,但这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 上查看在线演示

于 2013-01-13T21:45:36.727 回答
2

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

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

结论

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

于 2013-01-13T18:12:08.507 回答
2

我认为完成任务的最佳方法是使用自定义函数槽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
?>
于 2013-01-17T17:33:07.607 回答
2

你可以使用这个:

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

把它包装在一个函数中,你就设置好了。

于 2013-01-20T06:15:49.620 回答