2010-05-28 138 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開始?