我使用多维关联数组来跟踪每月总数,然后我想使用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
)
)
请有人帮忙吗?
答案 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 关闭并递给你一个二进制的密钥 不同于实际内容 数组。
这不是答案,但希望它可以帮助您排除故障。