这里有三元运算符吗?

时间:2010-12-31 02:29:58

标签: php

我正在尝试使用三元运算符完全设置$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;
}

5 个答案:

答案 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)中取出布尔值。

如果你想使用三元,你也可以,就像你对其他值一样,但它没有意义。