2009-02-12 42 views
15

Tôi đọc qua một thư mục với một số hình ảnh và ví dụ sử dụng một thực hiện khá đơn giản của readdir() như sau:PHP readdir() không trở về tập tin trong thứ tự chữ cái

if ($handle = opendir($path)) { 
    while (false !== ($szFilename = readdir($handle))) { 
    if ($szFilename[0] !== '.') { 
     if (is_file($path.$szFilename)) { 
       // do stuff 
      } 
     } 
    } 
} 

Vấn đề mà tôi đang gặp khó là các tệp không được đọc theo thứ tự bảng chữ cái dưới dạng tài liệu cho readdir() bang:

Trả về tên tệp của tệp tiếp theo từ thư mục. Các tên tệp là được trả lại theo thứ tự mà trong đó chúng được lưu trữ bởi hệ thống tệp.

Một điều kỳ lạ nữa là trên máy chủ thử nghiệm cục bộ, cùng một mã hoạt động rất tốt. Điều này đang chạy trên một máy chủ bằng cách sử dụng ngăn xếp LAMP trong cả hai trường hợp.

Tôi biết rằng tôi có thể xây dựng một mảng và chỉ sắp xếp nó, nhưng tôi đã tự hỏi nếu tôi đang thiếu một cái gì đó trong những gì tôi đã làm.

Trả lời

28

thứ tự chữ cái :: Tôi nghĩ rằng bạn hiểu sai đoạn bạn trích dẫn ...

Trả về tên tập tin của tập tin kế tiếp từ thư mục. Các tên tập tin được trả về theo thứ tự mà chúng được lưu trữ bởi hệ thống tập tin.

Thực tế là 'ls' sẽ hiển thị các tệp theo thứ tự chữ cái (thường) không có nghĩa là chúng được lưu trữ trên hệ thống tệp. PHP là hành vi như spec, tôi sợ.

Bạn có thể cân nhắc sử dụng scandir làm cơ sở cho nỗ lực của mình, nếu phân loại theo thứ tự chữ cái là điều bắt buộc.:)

+2

/me tát trán scandir() là những gì tôi đang tìm kiếm. Cảm ơn! – Buggabill

+1

BTW: ls -U liệt kê các tệp theo thứ tự các mục nhập thư mục của chúng được lưu trữ trong thư mục. –

+0

'glob()' chức năng cũng có thể giúp ở đây. http://php.net/glob Theo mặc định, nó trả về các tệp được sắp xếp theo thứ tự bảng chữ cái. –

4

tôi cho rằng tài liệu khá rõ ràng ở đây.

thứ tự mà chúng được lưu trữ trong hệ thống tập tin

là không giống như thứ tự alphabetic

+0

mayb e ông đã lưu trữ các hình ảnh trên máy chủ kiểm tra của bạn theo thứ tự bảng chữ cái, do đó làm cho trật tự được lưu trữ bằng thứ tự chữ cái – Jacco

+0

thứ tự không được bảo đảm là chữ cái. đó là những gì các tài liệu nói. – SilentGhost

+0

Các tài liệu không nói rằng thứ tự không được bảo đảm là chữ cái. Tôi sẽ không nói rằng họ "khá rõ ràng" về thứ tự hệ thống tập tin khác với thứ tự chữ cái. Các tài liệu không nói gì về chữ cái. Họ có thể rõ ràng hơn về sự khác biệt. –

1

Bạn đang hiểu sai các tài liệu:

Các tên tập tin được trả về trong thứ tự mà chúng được lưu trữ bởi hệ thống tập tin.

có nghĩa là tệp được trả về theo thứ tự chúng được tạo.

+1

nitpick: _probably_ có nghĩa là thứ tự chúng được tạo =) có thể tạo một hệ thống tệp trả về các tệp theo thứ tự khác, tôi tưởng tượng. – gnud

12

Bạn có thể sao chép tất cả các tên tập tin vào một mảng và sau đó sử dụng

<?php 
sort($filesArray); 
?> 
-1

Có một vài bạn có thể sử dụng:

thứ tự chữ cái Sắp xếp:

<?php 
sort($handle); 
?> 

Xếp thứ tự chữ cái Sắp xếp :

<?php 
rsort($handle); 
?> 
+0

'$ handle' trong OP là [' resource'] (http://php.net/manual/en/language.types.resource.php), không phải ['sort'] (http: // php .net/manual/en/function.sort.php) cũng không phải ['rsort'] (http://php.net/manual/en/function.rsort.php) chấp nhận. Người ta sẽ cần phải kéo toàn bộ mảng vào bộ nhớ và sau đó gọi 'sort()' hoặc 'rsort()'. Nếu một người làm phiền điều đó, người ta cũng có thể sử dụng 'scandir' trong tất cả các triển khai PHP hiện đại. – bishop

Các vấn đề liên quan