2010-05-28 116 views
3

我正在使用一个类,它返回一个Excel电子表格的特定行和单元格的值。要构建一列数组,我正在对行进行计数,然后用for()循环遍历该数字,然后使用$array[] = $value设置递增数组对象的值。PHP:检查是否为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获取数据。

Screenshot of spreadsheet

+2

尝试在您的数据数组上使用var_dump()和print_r()。这些漂亮的功能对调试非常有帮助! – 2010-05-28 13:41:27

+0

找到0时会发生什么? – Tommy 2010-05-28 13:43:12

+0

@John我这样做,这就是为什么我很困惑。我在excel文件中有30行,当我在数组上做一个print_r时,我只能得到不是0的值..所以它就好像它忽视了0 – tarnfeld 2010-05-28 13:44:27

回答

4

你尝试的array_push():字符串“雨量”零进行比较时,这里的=====之间的区别的总结?

array_push($rainfall, $data->val($i,2)); 
+0

YYESS !!!感谢YOOO! – tarnfeld 2010-05-28 13:48:15

+1

我真的很惊讶。 array_push()工作,但$ array [] = $ var;才不是?实际上,单个变量的array_push()不是别的,那么$ array [] = $ var;我想? – Max 2010-05-28 13:54:41

3

我会在这里使用的,而不是使用与not identical运营商进行严格比较的不等于运算符:

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

如果$data->val($i,2)是一个整数,并使用==双方将将其转换为整数,从而使您得到所有​​整数将按照您的预期工作的结果,除非为零。

0 == "RainFall" : true 
0 != "RainFall" : false 
0 === "RainFall" : false 
0 !== "RainFall" : true 
+0

PHP不会因为0和比较而变得愚蠢,这意味着它在某些情况下将0视为false而不是整数?我想我看到之前的某个地方...... – Tommy 2010-05-28 13:45:03

+0

是的。但它的记录:http://www.php.net/manual/en/types.comparisons.php – Arkh 2010-05-28 13:52:16

1

我认为该数组被视为false,这可以解释它不会进入数组。会像这样的工作(如果你使用整数)?

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

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

问题在于if语句。您试图将一个字符串与一个整数进行比较,该整数根据PHP文档将整型转换为整型。

如果您将数字与字符串进行比较或者比较涉及数字字符串,则将每个字符串转换为数字,并以数字形式进行比较。这些规则也适用于switch语句。当比较结果为===或!==时,类型转换不会发生,因为这涉及比较类型和值。

您可以在这里阅读更多http://php.net/manual/en/language.operators.comparison.php

更新:if语句不会在0因为(int)"Rainfall"意愿的情况下工作,由PHP类型强制转换成0造成的声明是if (0 != 0) { ... }

如果$i代表行号,为什么不从2开始而不是1开始?