2015-11-12 1 views
2

Я использую scandir и цикл foreach для отображения списка файлов в каталоге для пользователя. Мой код приведен ниже:PHP: Использование scandir bu исключая ../ ./ в результате

 $dir = scandir('/user1/caravans/public_html/wordpress/wp-content/uploads/wpallimport/files'); 

     foreach($dir as $directory) 
{ 
     echo "<br/><input type='checkbox' name=\"File[]\" value='$directory'/>$directory<br>"; 
     } 

Проблема заключается в том, что сценарий также имеет значение «.». и «..» (без речевых меток), есть ли элегантный способ их удаления? Короткое или регулярное выражение. Спасибо

ответ

6

Просто continue если каталог . или .. Я рекомендую взглянуть на контрольных структур here

$dir = scandir('/user1/caravans/public_html/wordpress/wp-content/uploads/wpallimport/files'); 

foreach($dir as $directory) { 
    if($directory == '.' || $directory == '..') { 
     // directory is . or .. 
     // continue will directly move on with the next value in $directory 
     continue; 
    } 

    echo "<br/><input type='checkbox' name=\"File[]\" value='$directory'/>$directory<br>"; 
} 

Вместо этого:

if($directory == '.' || $directory == '..') { 
    // directory is . or .. 
    // continue will directly move on with the next value in $directory 
    continue; 
} 

вы можете использовать короткую версию его:

if($directory == '.' || $directory == '..') continue; 
+1

Благодарим за это, это очень полезный способ фильтрации в цикле –

+1

Хотя это хороший ответ, пожалуйста, отформатируйте его так, чтобы новички понимали, что continue находится внутри if(), в то время как эхо-сигнал отсутствует. – Bonatti

+0

@Bonatti, обновил мой ответ :) – swidmann

2

Вы можете устранить эти каталоги с array_diff:

$dir = scandir($path); 
$dir = array_diff($dir, array('.', '..')); 
foreach($dir as $entry) { 
    // ... 
} 
+0

хорошее решение, я дам вам преимущество для этого :) – swidmann

1

Другим решением, кроме того, чтобы swidmann ответа, это просто удалить «» и «..» перед повторением их.

адаптировано из http://php.net/manual/en/function.scandir.php#107215

$path = '/user1/caravans/public_html/wordpress/wp-content/uploads/wpallimport/files'; 
$exclude = ['.', '..']; 
$dir  = array_diff(scandir($path), $exclude); 

foreach ($dir as $directory) { 
    // ... 
} 

Таким образом, вы можете легко добавить другие каталоги и файлы в список исключений, если возникнет необходимость в будущем.