通过三元表达式设置非空时的值

时间:2013-02-21 10:34:24

标签: php ternary-operator

我有一个非常快的问题:

我从Excel工作表中读取数据,并希望将其转换为关联数组。但有时在某些细胞中没有给出值。因此,如果发生这种情况,我想将数组的值设置为0。

现在我用三元运算符这样做,我很高兴我今天发现了:

(isset($excel->sheet[0]['cells'][$row][$value]) ? $excel->sheet[0]['cells'][$row][$value] : 0)

在这种情况下是否有缩短重复的意愿?它有效,但它不是那么漂亮:(

2 个答案:

答案 0 :(得分:3)

虽然不推荐这样做,但我会采用以下方式(PHP 5.3):

(@$excel->sheet[0]['cells'][$row][$value] ? : 0);

错误抑制操作符很乱,但在这种情况下,您唯一要注意的是关于未定义变量的众所周知的通知。

另一个选项(如Álvaro G. Vicario所述)可以是int的简单投射(NULL投射到0):

(int)@$excel->sheet[0]['cells'][$row][$value];

答案 1 :(得分:0)

另一种选择是制作一个函数来检查这种变量的存在 - 也许它有点过度工程,过度杀伤或者过多 - :

function iset($array, $output) {
    $args = func_get_args();
    $val = $array;
    for ($i = 1; $i < count($args) - 1; $i++) {
        if (!isset($val[func_get_arg($i)])) {
            return func_get_arg(func_num_args() - 1);
        }
        $val = $val[func_get_arg($i)];
    }
    return $val;
}

然后使用这样的函数:

$var = iset($excel->sheet, 0, 'cells', $row, $value, "DEFAULT_VALUE");