假设您有一些字符串,我应该如何转换它们以便能够在 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;
}
有了给定的信息,让我解释一下发生了什么?
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);
把它包装在一个函数中,你就设置好了。