2012-02-28 81 views
1

我正在使用php從mysql表中獲取一些數據。該表返回正確的結果,但因爲表有很多列,我認爲我可以創建for循環,並保存我所有的值爲val1,val2等我首先使用while循環,因爲可以有幾行:size_of回答錯誤的答案

while($row1 = mysql_fetch_array($sql2)){ 
    for($i = 1; $i < sizeof($row1); $i++) { 
     $val.$i = $row1[$i]; 
    } 

但是由於某種原因,sizeof($ row1)返回40,而我在該表中只有18列。

我認爲$val.$i = $row1[$i];是不是正確的方式來聲明一個變量?

我知道我會犯一個愚蠢的錯誤,但我無法弄清楚。 :S

+0

您有40條記錄? – ChristopheD 2012-02-28 22:38:18

+0

如果您的數據庫中有18個編號的列,則應該查看您的數據庫結構。 – 2012-02-28 22:39:00

+0

@ChtistopeD:不,我現在只有一個! – Namit 2012-02-28 22:39:17

回答

6

你要指定結果類型:

mysql_fetch_array($sql2, MYSQL_NUM); 

manual

通過使用MYSQL_BOTH(默認),你會得到既 關聯數組和數字指數。

+0

這適用於我,但我只是意識到我的問題與'$ val。$ i = $ row1 [$ i];''而不是任何線索? – Namit 2012-02-28 22:56:54

+0

@Namit爲什麼你的計數從1開始?應該不是0而是? – 2012-02-28 23:12:25

+0

我想從第二欄開始獲取數據,因爲第一欄只是關鍵。 – Namit 2012-02-28 23:13:02

0

也可能有一些重複的值從您的$ sql2, 在您的選擇使用DISTINCT關鍵字。

+1

這不會影響單行結果的數量。 – wallyk 2012-02-28 22:47:18

0

的文檔的sizeof網頁上竊取umopdn評論[在] MSN [DAWT] COM:

a)總是使用PHP的內部程序通過 不同類型的對象進行迭代...而不是你的解釋代碼循環通過 他們,他們使用自己的內部例程,這是更快。 (這就是爲什麼的foreach()將運行比手動更快互爲作用)

...

三)我PixEye對言論的sizeof()同意。在PHP中,它只是真實函數count()的一個 別名。它在其他語言中邏輯上具有其他含義 ,而不是對象中元素的數量。 這應該避免,因爲它可能會混淆開發人員從其他語言過渡到PHP的 。

你應該使用count()來支持sizeof(),但是否定的是你可以並且應該使用foreach()而不是for()。