我今天遇到了一些代码,其中字符串同时与两个值进行比较。我以前从未见过这个 - 这会有用吗?有人可以向我解释一下吗?
$foo = 'date';
if ($foo == ('date' || 'datetime')) {
echo "Hello world";
}
答案 0 :(得分:3)
那不行。写if ($foo == 'date' || $foo == 'datetime')
。
||
不仅不会从集合中进行选择,而且使用使用单个=
,这是用于分配而不是比较。
在这种情况下,使用布尔值或运算符比较常量字符串。为此,它们都被转换为布尔值。由于它们是非空字符串,因此它们评估为true
。 true或true返回true,分配给,与$ foo进行比较。如果$ foo是'date'或'datetime'或任何其他非空字符串,则该比较将始终为真。$foo
所以,无论$ foo的先前值是什么,或者甚至根本没有分配它,if-expression总是求值为true,所以你总是得到回声,$ foo总是{{1之后。
答案 1 :(得分:3)
这不起作用。 ('date' || 'datetime')
始终评估为true
。
请改用:
$foo = 'date';
if ($foo == 'date' || $foo == 'datetime') {
echo "Hello world";
}
答案 2 :(得分:1)
您可以尝试以下方法:
$haystack = array("date","datetime");
$needle = "date";
if (in_array($needle,$haystack)) {
// do something
}
答案 3 :(得分:0)
没有。 ||
或OR
运算符仅适用于布尔值。你需要这个条件:
if ($foo == 'date' || $foo == 'datetime') { ... }
但是如果你有10个可能值呢?你需要一个吗?是和否。
另一种可能性是将所有可能的值插入数组,并使用in_array()
检查您的值是否可以通过将其与该数组进行比较:
$possible_values = array('date', 'datetime');
if (in_array($foo, $possible_values)) { ... }