2013-08-23 127 views
0

我想要在名稱按順序排列的目錄中的第一個文件。下面是我使用的代碼(PHP):數組切片似乎並不工作

$dir = "fichiers/123/files_backup"; 
$premfic = array_slice(array_filter(scandir($dir), 'is_file'), 0, 5); 
print_r($premfic); 

但數組是空的...該目錄包含18號文件和單獨SCANDIR看到他們。任何想法? 謝謝

+1

Woudl有用看到你的'is_file'函數? – RiggsFolly

+1

@RiggsFolly is_file是一個默認的php函數,不是嗎? – StephenTG

+0

注意scandir不會返回文件的完整路徑,只有文件名,所以過濾器將刪除當前工作目錄中沒有文件名的任何文件。 – Orangepill

回答

5

is_file將無法​​正常工作,因爲您目前不在"fichiers/123/files_backup"。以下都應該工作:

chdir($dir); 
$premfic = array_slice(array_filter(scandir('.'), 'is_file'), 0, 5); 
// You may want to chdir back to your previous directory 
// You can use getcwd() before your chdir() to dynamically determine it 

或者:

$premfic = array_slice(array_filter(scandir($dir), function($filename) use ($dir){ 
    return is_file($dir . '/' . $filename); 
}), 0, 5); 

或者作爲OrangePill指出的(因爲水珠返回相對路徑,而不僅僅是文件名):

$premfic = array_slice(array_filter(glob($dir . '/*'), 'is_file'), 0, 5); 
+0

也可以接受'glob(「fichiers/123/files_backup/*」);' – Orangepill

+0

@Orangepill謝謝,我已經將該選項添加到我的答案中。 – Paulpro

+0

'無法打開目錄:沒有這樣的文件或目錄':-( – user2670167