【问题标题】:printing zero in case of null in foreach loop在 foreach 循环中为 null 的情况下打印零
【发布时间】:2019-11-23 06:24:21
【问题描述】:

这里显示了一个php代码

foreach ($icx_json_date as $key_date => $icx_value_date) {

        echo $icx_value_date["isd_out_traffic"] . ", ";
    }

这段代码的输出是

, , , , , , 14449.25, 881.50,

我想用零替换空输出并将输出显示为

0, 0, 0, 0, 0, 0, 14449.25, 881.50,

为此应该做哪些改变?

【问题讨论】:

    标签: php loops if-statement foreach


    【解决方案1】:

    使用简写条件运算符:

    foreach ($icx_json_date as $key_date => $icx_value_date) {
        echo ($icx_value_date["isd_out_traffic"] ?: 0) . ", ";
    }
    

    如果x 不为空,则x ?: yx,否则为y

    【讨论】:

    • @Barmar 这不是空合并运算符 (??) — 您使用了速记三元运算符 ?:。在这种情况下,输出是相同的,但是在一个值可能未定义的情况下,后者将发出一个 E_NOTICE,这通常是不受欢迎的(但它确实可以追溯到 PHP 5.3,而 null 合并运算符是在PHP 7)。不想挑剔,只是知道人们可能会对差异感到困惑(在这里也有介绍:stackoverflow.com/questions/34571330/…
    【解决方案2】:

    如果你不使用它,你可以完全省略不必要的$key_date =>
    你会有一个拖尾,,这通常是不可取的。
    如果数组键不存在,如果它将为 NULL,您也会收到警告(没有理由根据 php 设置填充日志)。

    我喜欢使用“静音”运算符,而不是将 isset 与三元/条件运算符结合使用。然后,您可以像这样简单地将类型转换为浮动:

    $out = [];
    foreach ($icx_json_date as $icx_value_date) {
        $out[] = (float)@$icx_value_date['isd_out_traffic'];
    }
    echo implode(', ', $out);
    

    如果您不想用任何变量污染当前作用域,您可以通过以下方式获得更好的体验:

    echo implode(', ',
        array_map(
            function($ar){ return (float)@$ar['isd_out_traffic']; },
            $icx_json_date
        )
    );
    

    不过,使用 ?: 运算符可能会更快。

    【讨论】:

      【解决方案3】:

      你可以使用Null coalescing操作符,如果你使用PHP 7+

      foreach ($icx_json_date as $key_date => $icx_value_date) {
          echo $icx_value_date["isd_out_traffic"]  ?? 0;
          echo  ", ";
      }
      

      【讨论】:

        【解决方案4】:

        如果所有数据都应该是数字:

        foreach ($icx_json_date as $key_date => $icx_value_date) {
            echo floatval($icx_value_date["isd_out_traffic"]) . ", ";
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-26
          • 1970-01-01
          • 2011-01-15
          • 2018-03-26
          • 1970-01-01
          • 2013-01-26
          • 2012-01-31
          • 1970-01-01
          相关资源
          最近更新 更多