我在使用这个三元运算符时遇到了什么错误?

时间:2017-04-10 15:01:06

标签: php operators

function get_status($data) {
    return ($data->cm_status == 'Y') ? 'Active' :
        ($data->cm_status == 'N') ? 'Inactive' : '-';    
}

如果Active$data->cm_status

,我应该Y

如果Inactive$data->cm_status

,我应该N

如果-是其他任何内容,我应该$data->cm_status

但实际上我得到Inactive

我在做什么错误?

引用您的回答

3 个答案:

答案 0 :(得分:3)

您需要将内部三元运算符包含在括号中,以便正确生成结果,例如

function get_status($data) {
    return $data->cm_status == 'Y' ? 'Active' :
        ($data->cm_status == 'N' ? 'Inactive' : '-');
}

更可读的方法可能是使用switch,而使用嵌套的三元运算符很容易混淆并导致比解决更多的混乱。 switch看起来像这样

function get_status($data) {
    switch ($data->cm_status) {
        case "Y":
            return 'Active';
        case "N":
            return 'Inactive';
        default:
            return '-';
    }
}

这也假设输入总是大写的,您可以添加额外的代码进行比较,无论其大写还是小写。

答案 1 :(得分:0)

在嵌套三元运算符的情况下,复合运算符应位于几个括号内。所以试试这个;

function get_status($data) {
    return ($data->cm_status == 'Y') ? 'Active' :(($data->cm_status == 'N') ? 'Inactive' : '-')
}

注意第二个三元条件运算符中的“()”。

答案 2 :(得分:0)

使用此:

function get_status($data) {
    return ($data->cm_status == 'Y') ? 'Active' :
        (($data->cm_status == 'N') ? 'Inactive' : '-');    
}