【问题标题】:Multi-dimensional array keys - strange behaviour多维数组键 - 奇怪的行为
【发布时间】:2023-04-06 05:51:02
【问题描述】:

我正在使用多维关联数组来跟踪每月总计,然后我想使用 foreach 遍历它并输出内容。

每个内部数组的总数都保存在元素 12 中,并且只希望每个数组在总数 > 0 时输出,但“Total”除外,即使它是 0,我也想输出。

  foreach($yearspend as $key => $format)
  {
     // only show formats with any spend
     if($key == "Total" || $format[12] > 0)
     {
        echo "<tr><td>$key</td>";
        foreach($format as $value)
        {
           echo "<td>".number_format($value,2)."</td>";
        }
        echo "</tr>";
     }
  }

由于某种原因,即使 [0][12] 为 0,也会输出内部数组 0。

这是 print_r 的输出:

Array
(
    [0] => Array
        (
            [12] => 0
        )

    [Group] => Array
        (
            [12] => 0
        )

    [Total] => Array
        (
            [12] => 0
        )
)

有人可以帮忙吗?

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    试试

     $key === "Total" ...
    

    在比较字符串和数字时,PHP 会尝试将字符串转换为数字类型,然后执行比较。 '===' 运算符比较值和类型,因此字符串永远不会等于数字。

    【讨论】:

    • 你说的都是真的。但它不会解决问题。条件是 if($key == "Total" || $format[12] &gt; 0) 只要 $key 评估为“Total”,其余的条件就会被忽略。
    • 这就是他想要的:“只希望每个数组在总数 > 0 时输出,但“Total”除外,即使它是 0,我也想输出。”
    【解决方案2】:

    如果值不是由解析器确定的,则字符串在 PHP 中的值为 0。即“4”与4相同,但“Total”被视为0。所以在PHP中,表达式

    "Total" == 0
    

    返回真。

    您可以使用 === 运算符更正此问题:

    if ("Total" === 0)
    

    返回假

    【讨论】:

      【解决方案3】:

      这可能是一个圆形错误问题。如果你的条件改成……还会出问题吗?

      if($key == "Total" || $format[12] > 0.001)
      

      【讨论】:

        【解决方案4】:

        Scott 的回答会起作用($key === "Total")。或者这样:

        if (strval($key) == "Total" || $format[12] > 0)
        

        【讨论】:

          【解决方案5】:

          我在 php 的 foreach 文档上看到了这条评论:

          使用时需要注意 foreach 传递数组的键($key => $value),键必须是字符串而不是二进制内容 - 包含 0's, f.e.,就像我使用时的情况一样 foreach 解析提交的编码数据 从 bittorrent 跟踪器返回给我 刮 - 因为这会抛出 foreach 关闭并递给您一个二进制密钥 与实际内容不同 数组。

          这不是一个答案,但希望它能帮助您解决问题。

          【讨论】:

          • 我从来没有及时赶上。我完成了我的答案,突然“已经发布了四个新答案......”哎呀。
          猜你喜欢
          • 2015-03-18
          • 1970-01-01
          • 2023-03-27
          • 2012-01-27
          • 2021-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-17
          相关资源
          最近更新 更多