利用cmd命令窗口的dir命令显示目录时,会在目录顶端看到两个特殊目录,分别是“.”——指向目录自身,以及“..”——指向上一级目录,在linux系统中,如果输入以下命令,也能看到这两个钉子户:
ls -all
用php的scandir获取到了文件夹中所有文件,想要遍历文件夹内的图片并显示在页面上,结果发现前两张图片无法显示,因为这两个特殊目录也被当成了文件名处理了,scandir返回的目录树类似下面的效果,但纯显示目录时不过是有碍观瞻,要取用数据,这两位就影响使用了:
Array
(
[0] => .
[1] => ..
[2] => 1.jpg
[3] => 2.jpg
[4] => 3.jpg
[5] => 4.jpg
)
网上有一种方案是利用array_diff函数来比对数组,将两个特殊目录设置为比对数组,然后让函数返回扫描结果与比对数组的差值,因为扫描结果中必然包含这两个特殊目录,与比对数组产生了重叠所以被筛选掉了。
<?php
$directory = '/path/to/my/directory';
$scanned_directory = array_diff(scandir($directory), array('..', '.'));
?>
array_diff函数
array_diff函数用于比较两个(或更多个)数组的值,并返回差集。该函数比较两个(或更多个)数组的值(key=>value 中的 value),并返回一个差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的值。
用法示例
array_diff(array1,array2,array3...);
注意事项
需要注意的是,该函数仅关心array1与后续数组是否有差值,即便返回了一个空数组,也不代表用来比对的数组与array1完全相同。所以需要用它来比较两个数组内容是否一致的时候,需要验证比较的双方都不存在差值。
if( !array_diff($arr1, $arr2) && !array_diff($arr2, $arr1)){
return true;
}