2

これは私のコードです:

$dir = "img/";
$files = scandir($dir);

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

配列のカウントは、空の配列で2の値を返します。隠しファイルをチェックしましたが、結果はゼロです。では、何が原因でしょうか?var_dump の結果

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" 
}
4

4 に答える 4

4

配列に「。」が含まれているためです。& '..' 2 つのファイル名。

以下のコードを使用してそれを取り除くことができます

$files = array_diff(scandir($dir), array('..', '.'));
于 2013-05-06T07:08:56.447 に答える
0

これは scandir() の通常の動作であり、これも当てはまります。

これは、すべてのディレクトリに 2 つの論理エントリが含まれているためです。

1) 「。」現在のディレクトリへの参照。
2) ".. 親ディレクトリへの参照。

したがって、空のディレクトリの場合も、リスト 2 で取得されます。

参照: PHP scandir() 関数

于 2013-05-06T07:09:09.353 に答える
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);
}
?>
于 2013-05-06T07:07:33.627 に答える
0

問題は、scandir() も "." を返すことです。および「..」は親ディレクトリを参照します。var_dump($files) を実行すると、私が話していることがわかります。

于 2013-05-06T07:10:55.183 に答える