问题描述
|
我有这个问题。我不知道我是不是太累了,还是有些东西不起作用。
我的代码是:
$sX = ($nr == 1 or $nr == 4 or $nr == 7 ? \"0\" : ($nr == 2 or $nr == 5 or $nr == 8 ? \"200\" : \"400\"));
$sY = ($nr == 1 or $nr == 2 or $nr == 3 ? \"0\" : ($nr == 4 or $nr == 5 or $nr == 6 ? \"200\" : \"400\"));
$nr
是[1..9]
范围内的整数(处于循环中)。在该语句下方的第一行,我输出了这两个变量。然后它们都是\"1\"
或null
。为什么?我只是看不到它:(
谢谢
浮点数
解决方法
这是因为三元运算符的优先级高于逻辑“ 5”。在所有
x or y or z
零件的周围加上括号。换句话说,您最好将该表达式编写为:
$sX = ($nr == 1 or $nr == 4 or ($nr == 7 ? \"0\" : ($nr == 2 or $nr == 5 or ($nr == 8 ? \"200\" : \"400\"))));
第二个相同。
参考:http://php.net/language.operators.precedence
, 直接的答案就如SimpleCoder所说:您需要修正运算符的优先级。
这可以通过使用||
而不是or
来完成:
$sX = ($nr == 1 || $nr == 4 || $nr == 7 ? \"0\" :
($nr == 2 || $nr == 5 || $nr == 8 ? \"200\" : \"400\"));
或加上括号(恕我直言更好,因为它很简单):
$sX = (($nr == 1 or $nr == 4 or $nr == 7) ? \"0\" :
(($nr == 2 or $nr == 5 or $nr == 8) ? \"200\" : \"400\"));
或者,甚至更好,重写代码使其更简单:
switch($nr % 3) {
case 1:
$sX = \"0\";
break;
case 2:
$sX = \"200\";
break;
default:
$sX = \"400\";
}
, 这可能是一个简短的示例,应该可以解决您的问题:
$sX = ($nr-1)%3 * 200;
$sY = floor(($nr-1)/3) * 200;
, 我认为您想尝试的是:
$sX = (($nr == 1 or $nr == 4 or $nr == 7) ? \"0\" : (($nr == 2 or $nr == 5 or $nr == 8) ? \"200\" : \"400\"));
希望能有所帮助。
也可以尝试使用ѭ15see准确查看正在计算的内容。
, 只需使用||
而不是or
。它具有更明显的优先级,并且可以执行您想要的操作。否则,请使用括号准确指定您的期望。
话虽这么说,该语句还是很难理解的,您应该将其分解为if / else块。