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"
}
配列から"."
および".."
を削除するにはどうすればよいですか?
array_filter を使用できます。
$indir = array_filter(scandir('../pages'), function($item) {
return !is_dir('../pages/' . $item);
});
これにより、すべてのディレクトリが除外され、ファイルとシンボリックリンクのみが残ります。本当に.
で始まるファイル(およびディレクトリ)のみを除外したい場合は、次のようにします。
$indir = array_filter(scandir('../pages'), function($item) {
return $item[0] !== '.';
});
array_diff
はあなたが探していることを行います:
$indir = scandir('../pages');
$fileextensions = array(".", "php", "html", "htm", "shtml");
$indir = array_diff($indir, array('.', '..'));
$replaceextensions = str_replace($fileextensions, "", $indir);
私はerknrioがこれに対する答えを提供したことを知っていますが、これはディレクトリなしでファイルの配列を取得するよりクリーンな方法です(より効率的になるように変更されています):
$dirPath = 'dashboard';
$dir = scandir($dirPath);
foreach($dir as $index => &$item)
{
if(is_dir($dirPath. '/' . $item))
{
unset($dir[$index]);
}
}
$dir = array_values($dir);
このスニペットを使用できます。ディレクトリ内のファイルのみを返します。
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>";
preg_replaceを使用して、あらゆる種類の隠しファイルをディレクトリから削除します
$files = array(".", "..", "html", ".~html", "shtml");
$newfiles = preg_grep('/^([^.])/', scandir($files));