28

scandir から返された配列がありますが、これには and が含まれていて"."".."そうしたくありません。

私のコード:

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

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

4

7 に答える 7

43

array_filterを使用できます。

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

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

$indir = array_filter(scandir('../pages'), function($item) {
    return $item[0] !== '.';
});
于 2013-02-04T04:00:38.783 に答える
9

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

于 2013-02-04T04:00:17.287 に答える
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>";
于 2016-11-09T13:14:37.640 に答える