【问题标题】:what does " $mark_state_id = $r['mark_state_id'] == 2 ? 1 : 2; " mean? [duplicate]“ $mark_state_id = $r['mark_state_id'] == 2 ? 1 : 2; ” 是什么意思? [复制]
【发布时间】:2015-06-15 06:36:29
【问题描述】:

$mark_state_id = $r['mark_state_id'] == 2 ? 1 : 2; 是什么意思?

朋友们,上面是干什么的?

【问题讨论】:

  • $mark_state_id 变为 2,除非 $r['mark_state_id'] 为 2,在这种情况下它变为 1。
  • 不过,这似乎是一个切换语句,所以$mark_state_id = 3 - $r['mark_state_id']; 也应该可以工作 ;-)

标签: php mysql sql sqlite


【解决方案1】:

最好写成(为了清楚起见用括号括起来):

$mark_state_id = ($r['mark_state_id'] == 2 ? 1 : 2);

表示“如果$r['mark_state_id']等于2,则返回1,否则返回2。那么$mark_state_id将取上面的返回值。相当于:

$mark_state_id;
if($r['mark_state_id'] == 2){
   $mark_state_id = 1;
} else {
   $mark_state_id = 2;
}

它使用ternary operator 作为 if/else 的简写。

【讨论】:

    【解决方案2】:

    这是一个三元运算符,意思是:如果$r['mark_state_id'] = 2 那么$mark_state_id = 1 else $mark_state_id = 2。

    这基本上意味着这个 if/else 语句:

    if($r['mark_state_id'] == 2){
      $mark_state_id = 1;
    } else {
      $mark_state_id = 2;
    }
    

    【讨论】:

    • 为什么这被否决了?
    • 很可能是这样
    • 所有答案都一样..
    • @Drakes Serial downvoter是什么@???
    • @Abdulla 用凶手代替downvoter,那么它应该变得清晰。
    【解决方案3】:

    表达式 (expr1) ? (expr2) : (expr3) 如果 expr1 的计算结果为 TRUE,则计算为 expr2,如果 expr1 的计算结果为 FALSE,则计算 expr3。

    它将检查$r['mark_state_id'] == 2。如果是true,那么它将分配1,否则分配2$mark_state_id = $r['mark_state_id'] == 2 ? 1 : 2; 类似于 -

    if($r['mark_state_id'] == 2) {
        $mark_state_id = 1;
    } else {
        $mark_state_id = 2;
    }
    

    Ternary Operator

    三元运算符是一个表达式,它的计算结果不是变量,而是表达式的结果。了解是否要通过引用返回变量很重要。语句 return $var == 42 ? $a : $b;因此,在按引用返回的函数中将不起作用,并且在以后的 PHP 版本中会发出警告。

    【讨论】:

      猜你喜欢
      • 2016-08-18
      • 2014-04-08
      • 1970-01-01
      • 2022-12-16
      • 2012-04-26
      • 2016-12-10
      • 2014-12-01
      • 2016-07-13
      • 1970-01-01
      相关资源
      最近更新 更多