Как проверить, является ли что-то файл или каталог в массиве в PHP? - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь отфильтровать некоторые папки в этом массиве:

Array
(
    [2] => 20151113_152308.jpg
    [3] => 20160524_173033.jpg
    [4] => 20160810_100405.jpg
    [5] => 20160816_142932.jpg
    [6] => 20160817_135507.jpg
    [7] => 20170203_145901.jpg
    [8] => 20170203_151235.jpg
    [9] => Afbeelding-ifone-131.jpg
    [10] => Afbeelding-ifone-508.jpg
    [11] => Bestratingswerkzaamheden
    [12] => Mvc-161.jpg
    [13] => Rioleringswerkzaamheden
    [14] => SANY0016.jpg
    [15] => SANY0036.jpg
    [16] => SANY0060.jpg
    [17] => SANY0132.jpg
    [18] => SANY0133.jpg
    [19] => SANY0158.jpg
    [20] => SANY0159.jpg
    [21] => SANY0361.jpg
    [22] => Zeefwerkzaamheden
)

Как вы видите, в массиве есть файлы, но есть и некоторые папки (без расширения). Я попытался отфильтровать их, используя is_dir().

Используя следующий код:

<code><?PHP
//Base path
$pad = "/home/studione/public_html/_extern/website/cms/images/beeldbank/".$alias."";
//Get everything from above path
$directories = array_diff(scandir($pad), array('.', '..', 'index.html'));
// Print array of above
echo '<pre>';
print_r($directories);
echo '
'; foreach ($ directory как $ image) { если (! is_dir ($ изображения) { $ impressionieslider. = ' '; } } эхо впечатлилслайдер; ?>

Но я все еще вижу папки на своей странице, почему? Я также пытался отобразить строку внутри цикла всякий раз, когда массив достигает папки, но я ничего не вижу. Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 08 апреля 2019

Существует простая функция, чтобы проверить, является ли каталог в PHP: is_dir() функция (https://www.php.net/manual/de/function.is-dir.php).

И вот простое решение:

$path = ''; // must be the path to the directory you want to check

$files_only = array_filter($directories, function($file_or_directory) use ($path) {
  // make sure you have the correct full path here with the realpath() function
  if(!is_dir(realpath($path . DIRECTORY_SEPERATOR . $file_or_directory))) {
    return true;
  }
  return false;
});

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

0 голосов
/ 08 апреля 2019

Вы можете сделать это простым способом

$dirPath = 'path/to/images/';
foreach(glob($dirPath.'*.{jpg,JPG,jpeg,JPEG,png,PNG}',GLOB_BRACE) as $file){
   $imgs[] =  basename($file);
}
0 голосов
/ 08 апреля 2019

Это то, что вы можете сделать в вашем случае.(Но это не идеальное решение, и оно не будет работать, если ваш каталог содержит символ (.))

foreach($directories as $image){
   $is_file = explode('.', $image);
  if(count($is_file) > 1 ) { //you can check either this file exist or not.
      $impressieslider .= '
      <div class="col-md-3">
        <a class="impressiegallerij" href="cms/images/beeldbank/'.$alias.'/'.$image.'">
          '.$directory.'
          <img src="cms/images/beeldbank/'.$alias.'/'.$image.'" class="d-block img-fluid gallerypageimg" alt="">
        </a>
      </div>';
  }
}
echo impressieslider;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...