【问题标题】:set value when not empty via ternary expression通过三元表达式设置不为空时的值
【发布时间】:2013-02-21 10:34:24
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php ternary-operator


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 如果你决定抑制错误,你可以只转换为数字:(int)@$excel->sheet[0]['cells'][$row][$value](float)@$excel->sheet[0]['cells'][$row][$value]
    • 感谢您的快速方法。认为? : 0 在真正的分支上什么都不做,但这使它更短。 Àlvaros 解决方案看起来也不错,因为没有决策。将尝试两者。谢谢大家!
    • @Sebastian empty true 分支表示“只返回测试表达式值”
    【解决方案2】:

    另一种选择是创建一个函数来检查此类变量的存在——也许它有点过度设计、过度杀伤或太多——:

    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");
    

    【讨论】:

    • 另一种导致解决方案的方法,但对于这件小事来说有点臃肿。感谢您的回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2012-05-15
    • 2017-02-02
    • 2017-12-24
    相关资源
    最近更新 更多