我正在尝试使用三元运算符完全设置$value1
,$value2
,$value3
。这就是没有三元运算符的情况:
if ($chk1 == 20) {
$value1 = true;
if ($chk2 == 40) {
$value2 = 100 ;
$value3 = 300;
} else {
$value2 = 200 ;
$value3 = 400;
}
} else {
$value1 = false;
}
我可以设置$value2
和$value3
,但不确定如何设置$value1
。可以吗?
if ($chk1 == 20) {
$value1 = true;
$value2 = ($chk2 == 40) ? 100 : 200;
$value3 = ($chk2 == 40) ? 300 : 400;
} else {
$value1 = false;
}
答案 0 :(得分:2)
这是使用三元运算符的方法:
$value1 = ($chk1 == 20) ? true : false;
然而,这里没有必要,你可以这样做:
$value1 = ($chk1 == 20);
此外,如果您放弃if ($chk1 == 20)
并且只想$value2
设置$value3
和$chk1 == 20
,则还需要更改它们,否则即使$chk1 != 20
与您发布的初始代码不同,也会设置它们。
例如,你可以这样做:
$value2 = ($chk1 == 20) ? (($chk2 == 40) ? 100 : 200) : $value2;
$value3 = ($chk1 == 20) ? (($chk2 == 40) ? 300 : 400) : $value3;
哪个应该有用(现在没有在哪里测试PHP),如果$chk1 == 20
,则保持value2和value3不变。
但是,为了便于阅读,我将其保留在ifs
,因为这种三元运算符的使用至少是不常见的。
答案 1 :(得分:1)
三元运算符语法为
<condition> ? <returned-value-if-true> : <returned-value-if-false>
例如
$value = $a < $b ? 10 : 20;
$ value如果($ a <$ b)需要10,否则它会收到20。
在你的情况下
$value1 = ($chk1 == 20 ? true : false);
使用三元运算符。
编辑整个程序。但如果$ chk1!= 20,则$value2/3
不会被分配
仅使用三元运算符
$value1 = ($chk1 == 20 ? true : false);
$value2 = ($chk1 == 20 ? ($chk2 == 40 ? 100 : 200) : $value2);
$value3 = ($chk1 == 20 ? ($chk2 == 40 ? 300 : 400) : $value3);
答案 2 :(得分:1)
好的,我会解释的。
$value1
的行为定义明确。如果$chk1
等于20,则为true
,否则为false
。
$value2
和$value3
的行为并不那么简单。如果$chk1
为20,则会根据$chk2
给出值。但是,如果$chk1
不 20,那么它们未定义。三元运算符没有“未定义”的概念;它只能理解“真实”和“虚假”。因此,整个系统不能仅被一系列三元操作替换,并且检查$chk1
的值的if语句必须存在。
如果$chk2
实际上是一个带副作用的函数调用,这甚至都不会触及存在的问题。
答案 3 :(得分:1)
如果您试图降低代码的可读性,请执行以下操作:
if ($value1 = ($chk1 == 20)) {
$value2 = ($chk2 == 40) ? 100 : 200;
$value3 = ($chk2 == 40) ? 300 : 400;
}
答案 4 :(得分:0)
你在做什么?
$value1=($chk1==20);
无需三元。只需从($chk1==20)
中取出布尔值。
如果你想使用三元,你也可以,就像你对其他值一样,但它没有意义。