Hướng dẫn php scandir exclude directories - php scandir loại trừ các thư mục

1

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang sử dụng scandir để liệt kê tất cả các tệp trong một thư mục. Nhưng cần có một ngoại lệ cho thư mục

$files = array_diff( scandir($dir), array(".", "..", "tmp") );
5,
$files = array_diff( scandir($dir), array(".", "..", "tmp") );
6 và
$files = array_diff( scandir($dir), array(".", "..", "tmp") );
7.

Tôi đã có cái này để loại trừ dấu chấm và chấm đôi:

$files = preg_grep('/^([^.])/', scandir($dir));

Làm cách nào để thêm thư mục

$files = array_diff( scandir($dir), array(".", "..", "tmp") );
7 vào nó? (Tên của thư mục là TMP)

Đã hỏi ngày 1 tháng 2 năm 2019 lúc 20:58Feb 1, 2019 at 20:58

Hướng dẫn php scandir exclude directories - php scandir loại trừ các thư mục

Jack Maessenjack MaessenJack Maessen

1.7404 Huy hiệu vàng17 Huy hiệu bạc44 Huy hiệu đồng4 gold badges17 silver badges44 bronze badges

2

Tôi sẽ chọn cho giải pháp này, vì đã được đề cập bởi @duskwuff, mã hiện tại của bạn không bao gồm tất cả các tệp bắt đầu bằng

$files = array_diff( scandir($dir), array(".", "..", "tmp") );
9

$files = array_diff( scandir($dir), array(".", "..", "tmp") );

Đã trả lời ngày 1 tháng 2 năm 2019 lúc 21:34Feb 1, 2019 at 21:34

1

Thử :

   $toRemove = array('.','..','tmp'); 

   $cdir = scandir($dir);
   
   $result = array_diff($cdir, $toRemove);

Nó dễ dàng hơn

   $toRemove = array('.','..','tmp'); 

   $cdir = scandir($dir);
   
   $result = array_diff($cdir, $toRemove);
0

Hướng dẫn php scandir exclude directories - php scandir loại trừ các thư mục

Đã trả lời ngày 1 tháng 2 năm 2019 lúc 21:05Feb 1, 2019 at 21:05

Hướng dẫn php scandir exclude directories - php scandir loại trừ các thư mục

VinzvinzVinz

1953 Huy hiệu bạc9 Huy hiệu Đồng3 silver badges9 bronze badges

Vì đó là một regex, bạn có thể cố gắng xem xét cái nhìn tiêu cực:

$files = preg_grep('/^(?!tmp|\.{1,2})$/', scandir($dir));

Đã trả lời ngày 1 tháng 2 năm 2019 lúc 21:22Feb 1, 2019 at 21:22

Hướng dẫn php scandir exclude directories - php scandir loại trừ các thư mục

Tôi đã làm một cái gì đó như vậy nếu bạn muốn gắn bó với regex

   $toRemove = array('.','..','tmp'); 

   $cdir = scandir($dir);
   
   $result = array_diff($cdir, $toRemove);
1

Đã trả lời ngày 1 tháng 2 năm 2019 lúc 21:31Feb 1, 2019 at 21:31

Hướng dẫn php scandir exclude directories - php scandir loại trừ các thư mục

DialexDialexDialex

4392 Huy hiệu bạc9 Huy hiệu Đồng2 silver badges9 bronze badges

Tôi có một mảng tôi đang trở lại từ scandir, nhưng nó chứa

   $toRemove = array('.','..','tmp'); 

   $cdir = scandir($dir);
   
   $result = array_diff($cdir, $toRemove);
2 và
   $toRemove = array('.','..','tmp'); 

   $cdir = scandir($dir);
   
   $result = array_diff($cdir, $toRemove);
3 và tôi không muốn nó.

Mã của tôi:

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

Tôi đang thực hiện một chuỗi thay thế trên các phần mở rộng tệp, do đó khiến [0] và [1] xuất hiện trống, nhưng chúng là

   $toRemove = array('.','..','tmp'); 

   $cdir = scandir($dir);
   
   $result = array_diff($cdir, $toRemove);
2 và
   $toRemove = array('.','..','tmp'); 

   $cdir = scandir($dir);
   
   $result = array_diff($cdir, $toRemove);
3

array(4) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(4) "test"
[3]=>
string(4) "home"
}

Làm thế nào tôi có thể loại bỏ

   $toRemove = array('.','..','tmp'); 

   $cdir = scandir($dir);
   
   $result = array_diff($cdir, $toRemove);
2 và
   $toRemove = array('.','..','tmp'); 

   $cdir = scandir($dir);
   
   $result = array_diff($cdir, $toRemove);
3 khỏi mảng?

Mark Amery

131K78 Huy hiệu vàng392 Huy hiệu bạc441 Huy hiệu Đồng78 gold badges392 silver badges441 bronze badges

Đã hỏi ngày 4 tháng 2 năm 2013 lúc 3:55Feb 4, 2013 at 3:55

1

Bạn có thể sử dụng Array_Filter.

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

Lưu ý Điều này lọc ra tất cả các thư mục và chỉ để lại các tệp và liên kết symlink. Nếu bạn thực sự chỉ muốn loại trừ các tệp (và thư mục) bắt đầu từ

$files = array_diff( scandir($dir), array(".", "..", "tmp") );
9, thì bạn có thể làm một cái gì đó như:

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

Đã trả lời ngày 4 tháng 2 năm 2013 lúc 4:00Feb 4, 2013 at 4:00

Leftclickbenleftclickbenleftclickben

4.48421 Huy hiệu bạc24 Huy hiệu đồng21 silver badges24 bronze badges

6

Cách nhanh nhất để xóa dấu chấm dưới dạng tệp trong scandir

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

Từ hướng dẫn sử dụng PHP

Đã trả lời ngày 28 tháng 2 năm 2015 lúc 14:21Feb 28, 2015 at 14:21

Mintedskymintedskymintedsky

1.04313 Huy hiệu bạc18 Huy hiệu đồng13 silver badges18 bronze badges

5

   $toRemove = array('.','..','tmp'); 

   $cdir = scandir($dir);
   
   $result = array_diff($cdir, $toRemove);
9 sẽ làm những gì bạn đang tìm kiếm:

$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

Đã trả lời ngày 4 tháng 2 năm 2013 lúc 4:00Feb 4, 2013 at 4:00

0

Leftclickbenleftclickben

$files = array_diff( scandir($dir), array(".", "..", "tmp") );
0

4.48421 Huy hiệu bạc24 Huy hiệu đồngMar 10, 2017 at 15:03

4

Cách nhanh nhất để xóa dấu chấm dưới dạng tệp trong scandir

$files = array_diff( scandir($dir), array(".", "..", "tmp") );
1

Đã trả lời ngày 9 tháng 11 năm 2016 lúc 13:14Nov 9, 2016 at 13:14

mrroot5mrroot5mrroot5

1.6213 Huy hiệu vàng25 Huy hiệu bạc 30 Huy hiệu Đồng3 gold badges25 silver badges30 bronze badges

Chỉ cần sử dụng preg_replace để xóa tất cả các loại tệp của Hidden khỏi thư mục

$files = array_diff( scandir($dir), array(".", "..", "tmp") );
2

Đã trả lời ngày 22 tháng 9 năm 2017 lúc 6:01Sep 22, 2017 at 6:01

Devdutt Sharmadevdutt SharmaDevdutt Sharma

3811 Huy hiệu vàng2 Huy hiệu bạc10 Huy hiệu đồng1 gold badge2 silver badges10 bronze badges

Nếu bạn cần một chức năng sạch;

$files = array_diff( scandir($dir), array(".", "..", "tmp") );
3

Tôi nghĩ rằng chức năng này vừa gọn gàng và sẽ hoạt động tốt.Ngoài ra, các khóa của mảng được trả về trong hàm này được sắp xếp chính xác.

Đã trả lời ngày 14 tháng 10 năm 2021 lúc 10:27Oct 14, 2021 at 10:27

Tất cả các câu trả lời khác là tốt.Tôi có một cách giải quyết sạch sẽ làm việc cho tôi.

Sử dụng chức năng GLOB có Regex và chỉ trả về các tệp phù hợp.Nó dường như loại trừ các thư mục

$files = array_diff( scandir($dir), array(".", "..", "tmp") );
9 và
$files = preg_grep('/^(?!tmp|\.{1,2})$/', scandir($dir));
1, vì vậy sử dụng một đơn giản

$files = array_diff( scandir($dir), array(".", "..", "tmp") );
4

nên làm việc tốt.

Đã trả lời ngày 23 tháng 8 lúc 12:24Aug 23 at 12:24

EpanemuepanemuEpanemu

961 Huy hiệu bạc10 Huy hiệu đồng1 silver badge10 bronze badges

Không phải là câu trả lời bạn đang tìm kiếm?Duyệt các câu hỏi khác được gắn thẻ Php scandir hoặc đặt câu hỏi của riêng bạn.