我试图保留if elseif else在三元php请检查我的代码解析错误:语法错误,意外':'在我做错了吗?
$v= array(
'header' => 'Request Status',
'value' => '($data->status == 0) ? "Pending" : (($data->status == 1) ? "Accepted" : "Rejected":(($data->status == "") ? "test")'
);
答案 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")
)
注意:
删除值周围的单引号'...'
。这使您的代码只是一个字符串。
如果该块中有另一个三元运算符,则将每个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"
)
)
);