字符串之间的逻辑运算

时间:2012-07-03 12:24:33

标签: php string

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

示例:我想要

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

返回false

4 个答案:

答案 0 :(得分:5)

简介

我注意到您在字符串&&中同时拥有Logical Operator =Assignment Operator,并且您想要评估分配在字符串中是否有逻辑运算符。说真的,我不知道你是怎么来到这里的,但这是very wrong但是用于教育目的标签

细分

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

上述表达始终为false,因为X不能equal同时01

为了能够在PHP中进行此类评估,您需要编写自己的函数,例如logicalString,您可以使用logicalString("x=1")logicalString("x=0") <来评估表达式/ p>

假设

$x = 1; // Imagine value of X 

示例1&amp;&amp;

// 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

使用的功能( Not to be used in production See Why

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

SEE ONLINE DEMO on PHP 4.3.0 - 5.5.0alpha3

答案 1 :(得分:2)

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

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

将输出

true

你正在努力实现的目标不是虚荣。 String不是逻辑表达式,逻辑表达式由一个或多个逻辑运算符以及逻辑,数字或关系操作数组成。 Read more

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

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

它根本不关心那里有什么。所有它关心的是有两个非空的字符串。

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

将返回false

结论

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

答案 2 :(得分: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
?>

答案 3 :(得分:2)

您可以使用:

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

将其包裹在一个函数中并进行设置。