2013-08-23 6 views
0

Я пытаюсь создать первый файл в каталоге, упорядоченном по имени asc. Вот код, я использую (PHP):Array slice не работает

$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