我有一个我从scandir回来的数组,但它包含"."
和".."
,我不想要它。
我的代码:
$indir = scandir('../pages');
$fileextensions = array(".", "php", "html", "htm", "shtml");
$replaceextensions = str_replace($fileextensions, "", $indir);
我正在对文件扩展名进行字符串替换,从而导致[0]和[1]显示为空,但它们是"."
和".."
array(4) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(4) "test"
[3]=>
string(4) "home"
}
如何从数组中删除"."
和".."
?
答案 0 :(得分:30)
您可以使用array_filter。
$indir = array_filter(scandir('../pages'), function($item) {
return !is_dir('../pages/' . $item);
});
注意这会过滤掉所有目录,只留下文件和符号链接。如果您真的只想排除以.
开头的文件(和目录),那么您可以执行以下操作:
$indir = array_filter(scandir('../pages'), function($item) {
return $item[0] !== '.';
});
答案 1 :(得分:16)
答案 2 :(得分:7)
array_diff
会做你想要的:
$indir = scandir('../pages');
$fileextensions = array(".", "php", "html", "htm", "shtml");
$indir = array_diff($indir, array('.', '..'));
$replaceextensions = str_replace($fileextensions, "", $indir);
答案 3 :(得分:1)
我知道erknrio为此提供了答案,但是这里有一种更简洁的方法来获取没有目录的文件数组(修改为更高效):
$dirPath = 'dashboard';
$dir = scandir($dirPath);
foreach($dir as $index => &$item)
{
if(is_dir($dirPath. '/' . $item))
{
unset($dir[$index]);
}
}
$dir = array_values($dir);
答案 4 :(得分:0)
您可以使用此代码段。它只返回目录中的文件:
function only_files($dir_element) {
if (!is_dir($dir_element)) {
return $dir_element;
}
}
function givemefiles($dir) {
$scanned_dir = scandir($dir);
return array_filter($scanned_dir, "only_files");
}
$dir_path = '../pages';
givemefiles($dir_path);
echo "<pre>";
var_dump($scanned_dir);
echo "</pre>";
答案 5 :(得分:0)
只需使用preg_replace从目录中删除所有类型的隐藏文件
$files = array(".", "..", "html", ".~html", "shtml");
$newfiles = preg_grep('/^([^.])/', scandir($files));