2011-05-23 55 views
1

我希望限制在整理目錄中的文件並按時間排序之後返回的結果。並且爲了防止目錄中沒有文件,我還想包含一個if file exists短語。這是目前的代碼。在按時間排序全局排序後限制最大結果

$list = glob('items/*.html'); 
usort(
    $list, 
    create_function('$a,$b', 'return filemtime($a) < filemtime($b);') 
); 


foreach($list as $file) 
{ 
    include $file; 
} 

現在,我猜,我大概可以做if (file_exists())部分是這樣的:

foreach($list as $file) 
{ 
if (file_exists($file)) { 
    include $file;} 
} 

部分未拋出錯誤,但我在哪裏做了數高達5或7最大?

回答

0

嘗試(爲最多5文件包括)

foreach($list as $k=>$v) 
{ 
    if($k<5 && file_exists($v)) 
    include_once $file; 
    else 
     break; 

} 
1

glob返回時,有目錄中沒有文件空數組。這意味着,一個file_exists將是無用的,就像你有一個來自glob的值,它就會存在。

如果glob以某種方式失敗,它將返回false。如果發生這種情況,腳本會拋出一些錯誤。嘗試在使用is_array的foreach之前檢查數組。

1
$limit=5; 
$list = glob('items/*.html'); 
usort(
    $list, 
    create_function('$a,$b', 'return filemtime($a) < filemtime($b);') 
); 

$list=array_slice($list, 0, $limit); 

foreach($list as $file) { 
    include $file; 
} 

是不是真的有必要在這裏做一個file_exists()查詢,因爲如果glob發現了它,它應該存在。您可能希望做一個is_readable()不過,在這種情況下,你可以重寫這樣的:

$limit=5; 
$list = glob('items/*.html'); 
usort(
    $list, 
    create_function('$a,$b', 'return filemtime($a) < filemtime($b);') 
); 

$i=0;  
foreach($list as $file) { 
    if ($i < $limit && is_readable($file)) { 
     include $file; 
     $i++; 
    } 
} 

您可能還需要增加一個檢查,如果glob由於某種原因失敗。

$list = glob('items/*.html'); 
if ($list===false) { 
    /*handle error (or simply $list=array() if you don't care)*/ 
} 
+0

嗨Bazmegakapa,感謝您的回答。我是否正確地認爲,如果我想添加檢查來查看glob是否因某種原因失敗,那麼我可以這樣做:if($ list === false){} else {usort(...}? – Dave 2011-05-24 09:36:03

+0

@Dave是的,這是一種可能的方法,非常好。 – kapa 2011-05-24 10:26:05

+0

終於有機會對它進行測試,因爲我在將文件放入項目文件夾的代碼出現問題。 – Dave 2011-06-01 05:07:13