多维数组键 - 奇怪的行为

时间:2009-11-06 14:06:57

标签: php arrays

我使用多维关联数组来跟踪每月总数,然后我想使用foreach循环它并输出内容。

每个内部数组的总数保存在元素12中,并且只有当总数> 1时才希望输出每个数组。 0,除了“总计”,我想输出即使它是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
        )
)

请有人帮忙吗?

5 个答案:

答案 0 :(得分:1)

尝试

 $key === "Total" ...

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

答案 1 :(得分:1)

如果解析器未确定该值,则字符串在PHP中求值为0。即“4”与4相同,但“Total”的处理方式与0相同。所以在PHP中,表达式

"Total" == 0

返回true。

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

if ("Total" === 0)

返回false

答案 2 :(得分:0)

这可能是一个圆形错误问题。如果您的情况改为......,它仍然会出错吗?

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

答案 3 :(得分:0)

斯科特的回答将起作用($ key ===“Total”)。或者这个:

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

答案 4 :(得分:0)

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

  

应注意使用时   foreach传递数组的键($ key   =&GT; $ value),密钥必须是字符串而不是二进制内容 - 包含   0,f.e。,就像我使用的情况一样   foreach解析bencoded数据   从一个bittorrent跟踪器回到我身边   刮 - 因为这将抛出foreach   关闭并递给你一个二进制的密钥   不同于实际内容   数组。

这不是答案,但希望它可以帮助您排除故障。