PHP:检查是否为0?

3

我正在使用一个类,它返回Excel电子表格中特定行和单元格的值。为了建立一个一列的数组,我先计算行数,然后使用for()循环遍历这个数字,再使用$array[] = $value来设置递增的数组对象的值。

如果单元格中没有任何值为0,这个方法可以很好地工作。但是,如果单元格中有值为0,那么这个类会返回数字0。我认为问题出在我循环遍历行并将它们赋值给数组的方式上……因为我之后要用这些数据创建图表,所以我希望保留0值。以下是我的代码:

// Get Rainfall
$rainfall = array();
for($i=1;$i<=$count;$i++)
{
    if($data->val($i,2) != 'Rainfall') // Check if not the column title
    {
        $rainfall[] = $data->val($i,2);
    }
}

请注意,$data 是 Excel 电子表格对象,方法 $data->val(row,col) 返回数值。在这种情况下,我正在从第 2 列获取数据。

电子表格截图


2
尝试在您的数据数组上使用var_dump()和print_r()。这些巧妙的函数对于调试非常有帮助! - John Himmelman
当发现0时会发生什么? - Tommy
@John 我已经这样做了,所以我很困惑。Excel文件中有30行,当我在数组上执行print_r时,我只得到不为0的值..就好像它忽略了0一样。 - tarnfeld
@Tommy,由于某种原因,它没有将其添加到数组中。 - tarnfeld
4个回答

4
你尝试过使用array_push()函数吗?
array_push($rainfall, $data->val($i,2));

1
我在这里真的很惊讶。array_push()可以工作,但$array[] = $var;却不行?实际上,对于单个变量,array_push()什么也不是,只是$array[] = $var;,我以为呢? - Max

3

在这里,我会使用严格比较和非恒等运算符,而不是使用不等于运算符:

if($data->val($i,2) !== 'Rainfall')

如果$data->val($i,2)是一个整数,而你使用==,那么两边都会被转换成整数,这将导致所有整数按照你的期望工作,除了零。以下是比较字符串"RainFall"和零时=====之间的区别概述:
0 == "RainFall" : true
0 != "RainFall" : false
0 === "RainFall" : false
0 !== "RainFall" : true

PHP在处理0和比较时会变得有些古怪,这意味着在某些情况下它将0视为false而不是整数。我想我以前在某个地方看到过这个... - Tommy

1

我认为数组将0视为false,这可能解释了它为什么没有进入数组。如果您正在使用整数,类似于这样的东西是否有效?

(int)($data->val($i,2));

或者

(float)($data->val($i,2);)

0
问题出在if语句中。您试图将字符串与整数进行比较,根据PHP文档,这将将两者都强制转换为整数。
引用:
如果将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都将转换为数字,并以数字方式执行比较。这些规则也适用于switch语句。当比较是===或!==时,不会进行类型转换,因为这涉及比较类型和值。
您可以在此处阅读更多信息http://php.net/manual/en/language.operators.comparison.php
更新:如果是0的情况,if语句将无法工作,因为PHP将(int)"Rainfall"强制转换为0,导致语句为if (0 != 0) { ... }。
如果$i表示行号,为什么不从2开始而不是1?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接