2013-05-06 26 views
2

這是我的代碼:數組的PHP計數返回比它應該更多?

陣列的
$dir = "img/"; 
$files = scandir($dir); 

for ($i=0; $i <= count($files); $i++) { 
    echo $files[$i]."<br/>"; 
} 
echo count($files); 

計數空數組返回值爲2,我cheched隱藏文件,零resault。 那麼,什麼會導致這種情況? 的var_dump resault

array(7) { 
[0]=> string(1) "." 
[1]=> string(2) ".." 
[2]=> string(8) "img1.gif" 
[3]=> string(8) "img2.gif" 
[4]=> string(8) "img3.jpg" 
[5]=> string(8) "img4.png" 
[6]=> string(8) "img5.png" 
} 
+0

'var_dump($ files);' – 2013-05-06 07:03:07

+0

同意@HankyPankyㇱ – 2013-05-06 07:04:48

回答

4

它因爲你的數組包含'。' &'..'兩個文件名。

您可以通過下面的代碼

$files = array_diff(scandir($dir), array('..', '.')); 
0

您應首先檢查的scandir返回值。看看$files是否真的是一個數組?

<?php 
$dir = "t"; 
$files = scandir($dir); 
if(is_array($files)) 
{ 
for ($i=0; $i <= count($files); $i++) { 
    echo $files[$i]."<br/>"; 
} 
echo count($files); 
} 
?> 
+0

是的,謝謝你作爲迴應,我檢查了這個手冊 – Raimonds 2013-05-06 07:12:43

0

擺脫它,這是SCANDIR的正常行爲()和亦是如此。

這是因爲每個目錄包含兩個邏輯條目

1)「。」參考當前目錄。
2) 「..

所以對於空目錄也U將得到在列表2件事

見參考父目錄:PHP scandir() Function

+0

謝謝,這解釋了一個批量 – Raimonds 2013-05-06 07:12:15

0

的問題是,SCANDIR()也會返回。」如果你var_dump($ files)你會看到我在說什麼。