web-dev-qa-db-ja.com

scandir配列にJUSTファイルを含めますか?

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

配列から"."および".."を削除するにはどうすればよいですか?

21
Rbn

array_filter を使用できます。

$indir = array_filter(scandir('../pages'), function($item) {
    return !is_dir('../pages/' . $item);
});

これにより、すべてのディレクトリが除外され、ファイルとシンボリックリンクのみが残ります。本当に.で始まるファイル(およびディレクトリ)のみを除外したい場合は、次のようにします。

$indir = array_filter(scandir('../pages'), function($item) {
    return $item[0] !== '.';
});
36
leftclickben

Scandirでファイルとしてドットを削除する最速の方法

$files = array_slice(scandir('/path/to/directory/'), 2); 

PHPマニュアル から

21
mintedsky

array_diffはあなたが探していることを行います:

$indir = scandir('../pages');
$fileextensions = array(".", "php", "html", "htm", "shtml");
$indir = array_diff($indir, array('.', '..'));
$replaceextensions = str_replace($fileextensions, "", $indir);

http://php.net/manual/en/function.array-diff.php

8
Jonathan Wren

私はerknrioがこれに対する答えを提供したことを知っていますが、これはディレクトリなしでファイルの配列を取得するよりクリーンな方法です(より効率的になるように変更されています):

$dirPath = 'dashboard';

$dir = scandir($dirPath);

foreach($dir as $index => &$item)
{
    if(is_dir($dirPath. '/' . $item))
    {
        unset($dir[$index]);
    }
}

$dir = array_values($dir);
2

このスニペットを使用できます。ディレクトリ内のファイルのみを返します。

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>";
0
mrroot5

preg_replaceを使用して、あらゆる種類の隠しファイルをディレクトリから削除します

$files = array(".", "..", "html", ".~html", "shtml");    
$newfiles = preg_grep('/^([^.])/', scandir($files));
0
Devdutt Sharma