4

我有一个非常简短的问题要问你:

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

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

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

在这种情况下,有什么办法可以缩短 repitition 吗?它有效,但不是那么漂亮:(

4

2 回答 2

3

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

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

错误抑制运算符是一团糟,但在这种情况下,您唯一抑制的是关于未定义变量的众所周知的通知。

另一种选择(如Álvaro G. Vicario所述)可以是简单的转换为int(如NULL转换为0):

(int)@$excel->sheet[0]['cells'][$row][$value];
于 2013-02-21T10:44:06.690 回答
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");
于 2013-02-21T10:59:38.083 回答