if elseif其他三元运算符不在php中工作

时间:2016-01-09 13:58:25

标签: php

我试图保留if elseif else在三元php请检查我的代码解析错误:语法错误,意外':'在我做错了吗?

$v= array(
    'header' => 'Request Status',
    'value' => '($data->status == 0) ? "Pending" : (($data->status == 1) ? "Accepted" : "Rejected":(($data->status == "") ? "test")'
);

4 个答案:

答案 0 :(得分:1)

如果使用开关

,它将更具可读性,而不是嵌套三元运算符
switch($data->status) {
    case 0:
        $val = "Pending";
        break;
    case 1:
        $val = "Accepted";
        break;
    case "":
        $val = "Empty";
        break;
    default:
        $val = "Rejected";
        break;
}

然后您可以在数组中稍后使用$val

答案 1 :(得分:0)

<?php
  $v= array(
    'header' => 'Request Status',
    'value' =>   $data->status == 0  ? "Pending" 
               : $data->status == 1  ? "Accepted" 
               : $data->status == "" ? "empty" 
               : "Rejected")
);

但是在我的诚实意见中,最好避免使用多元三元运算符。 如果你像这样分割线条,那么三元组中就有一些逻辑,但在每种情况下情况并非如此。

这是一个更好的解决方案:

function getStatus($v){
  switch($v) {
    case 0:  return "Pending";
    case 1:  return "Accepted";
    case "": return "Empty"; 
  }

  return "Rejected";    
}

$v= array(
    'header' => 'Request Status',
    'value' => getStatus($data->status)
);

答案 2 :(得分:0)

如果您的意图是这样的话:

if($data->status === 0) "Pending"
elseif($data->status == 1) "Accepted"
elseif($data->status === "") "test"
else "Rejected"

你可以这样做:

'value' =>  $data->status === 0 ? "Pending" : (
               $data->status == 1 ? "Accepted" :
                   ($data->status === "" ? "test" : "Rejected") 
            )

注意:

  1. 删除值周围的单引号'...'。这使您的代码只是一个字符串。

  2. 如果该块中有另一个三元运算符,则将每个else块放在括号内。这消除了对三元运算符优先级的混淆。

答案 3 :(得分:0)

首先,正如Tareq Mahmood所说:你的三元运算符用单引号括起来,因此被视为一个字符串。结果,整个命令被赋予名为“value”的项目。 显示$ v数组的内容证明了这一点。脚本......

$v= array(
    'header' => 'Request Status',
    'value' => '($data->status == 0) ? "Pending" : (($data->status == 1) ? "Accepted" : "Rejected":(($data->status == "") ? "test")'
);
// Display what is in the array
echo '<pre>';
print_r($v);
echo '</pre>';

...给出

Array ( [header] => Request Status [value] => ($data->status == 0) ? "Pending" : (($data->status == 1) ? "Accepted" : "Rejected":(($data->status == "") ? "test") )

(顺便说一下,你的问题代码中没有语法错误。)

我的猜测:“价值”的值应该是 - 取决于$ data-&gt;的值 状态: == 0 : "Pending" == 1 : "Accepted" == "" : "Rejected" else : "test"

正确的相应代码是:

$v= array(
    'header' => 'Request Status',
    'value' => ($data->status == 0) ? "Pending" : ( ($data->status == 1) ? "Accepted" : ( ($data->status == "") ? "Rejected" : "test" ) )
);

`

......或者是更详细的格式:

    $v= array(
   'header' => 'Request Status',
   'value' => 
      ($data->status == 0) 
         ? "Pending" 
         : (
            ($data->status == 1) 
               ? "Accepted" 
               : (
                  ($data->status == "") 
                     ? "Rejected" 
                     : "test"
               )
         )
    );