if($x != (y&&z&&r&&w))
或者我必须像这样写
if($x!=y && $x!=z && $x!=r && x!=w)
只是想知道,因为我有很多变量要比较,只是想要一个更优雅的解决方案。
无论如何,你可能会有一个更优雅的解决方案。这就是我想要做的。
foreach($_POST as $key => $value){
if($key != 'category_id'){
$cp[$key] = $value;
}
}
我在$ _POST语句中还有6个以上的变量要比较,我想让代码漂亮。它基本上是一个巨大的形式,需要格式化为特定的数组($ cp []),并使用特定的键来使用我的MySQL插入语句。
有什么奇特的想法吗?
答案 0 :(得分:4)
您的第一部分代码:
if($x != (y&&z&&r&&w))
将评估常量y
,z
,r
和w
(字符串'y'
,'z'
,{{1 }}和'r'
,如果这些常量不存在的话);在每一个之间做'w'
。
然后,此AND
的结果将与AND
进行比较 - 这将被视为布尔值。
所以,不,它不是你想做的那样;你必须使用你的第二部分代码:
$x
请注意,这里也会搜索名为if($x!=y && $x!=z && $x!=r && x!=w)
,y
,z
和r
的常量(或字符串,如果这些常量仍然存在不存在) - 如果你希望它们被视为变量,你应该在它们面前放一些w
。
如果要测试变量是否具有多个值中的一个,可能的解决方案是将这些值放入数组中,然后使用in_array()
函数:
$
有些人认为这种方式比写几种比较更容易理解 - 我有时会自己使用它,有点像它。
答案 1 :(得分:2)
您必须编写长格式或使用in_array
以及包含值的数组。
答案 2 :(得分:1)
你可以不这样做:
if($x != (y&&z&&r&&w))
必须将它们分开进行4次比较。
或者,您可以做的是将值粘贴在一个数组中,只进行一次比较:
$skip_keys = array('a', 'b', 'c', 'd');
foreach ($_POST AS $key => $value) {
if ( ! in_array($key, $skip_keys)) {
// Continue
}
}
答案 3 :(得分:0)
你不能说
if ($x != (1&&2&&3))
像那样
我早年也想知道我们能不能做到
if (1 < $x < 5)
答案是否定的。但您可以使用in_array()
来测试数组中的某些内容,以便您一次检查多个值:
答案 4 :(得分:0)
我的建议是,如果你多次进行这种比较,就是编写一个验证你的要求的函数。因此,您将传入'$ x'并将其与您需要的所有内容进行比较,并获得布尔结果。使用ifs和elseifs可以很好地构建该函数,并且可以保持代码更清晰。
所以,例如......
<?php
// random, bad logic, but you get the idea
function validateThisThing($x) {
$toReturn = false;
if ($x == 'this') {
$toReturn = true;
} elseif ($x == 'that') {
$toReturn = true;
}
return $toReturn;
}
然后您可以根据需要使用该功能,并使您的检查更清晰,更有条理,因为您的功能名称将为检查内容带来上下文。