>假设你有一些字符串,我应该如何转换它们才能在PHP中使用逻辑运算?甚至可能吗?
示例:我想要
"x=1"&&"x=0"
返回false
.
简介
我注意到您在字符串=
中同时具有逻辑运算符&&
和赋值运算符,并且您想评估字符串中具有逻辑运算符的赋值。 说真的,我不知道你是怎么来到这里的,但这very wrong
但出于教育目的
故障
"x=1" && "x=0" = False
^ ^ ^
| | |
| |
X == 1 | |
| |
AND |
|
X == 0
上面的表达式总是false
的,因为X
不能同时equal
0
和1
为了能够在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);
将其包装在一个函数中,您就设置好了。