Не удается удалить «.» / «..» из массива scandir

#php #arrays #loops #scandir

#php #массивы #циклы #scandir

Вопрос:

Я использовал scandir для получения некоторых имен файлов в массив, а затем пытался использовать if stmt, чтобы вырезать «.» и «..» из массива, если они существовали, но это не сработало, поэтому я попытался повторить изображение только в том случае, если переменная не была «..» или «.» и это не сработало. Пример кода ниже:

 if ($pages[$pageIndex] == "." || $pages[$pageIndex] == "..") {
  array_slice($pages, 0, 2);
  print_r($pages);
}
# And

while ($i < $pagesLength) {
  if ($pages[$pageIndex] != "." || $pages[$pageIndex] != "..") {
    echo "<img src='series/series_" . rawurlencode($_GET['series']) . "/series_" . rawurlencode($newLink) . "/" . rawurlencode($pages[$pageIndex]) . "'>";
    $pageIndex = $pageIndex   1;
    $i  ;
  }
}                            }
  

Они оставались независимо от того, что я делал, как я могу от них избавиться?

Содержимое массива: содержимое массива

Комментарии:

1. как выглядит структура?

2. Если вы имеете в виду структуру массива, я обновлю сообщение, включив изображение того, как оно печатается.

3. Это содержимое $pages или $pages[$pageIndex] ? Что такое $pageIndex ?

4. О, да, ваше право, я думаю, цикл while здесь точно не нужен. и $pages[$pageindex] — это всего лишь один элемент из массива. переменная pageindex представляет собой целое число, которое увеличивается при каждом цикле. Спасибо за идею, я попробую это сейчас.

5. Сработало как шарм, спасибо! Это даже сокращает мой код на одну или две строки теперь, когда я не использую полностью отдельную переменную для индексации.

Ответ №1:

Используйте for цикл, начинающийся со строки 2, чтобы пропустить . / .. .

 for ($i = 2; $i <= $pagesLength; $i  ) {
  // do something
}
  

Ответ №2:

Хорошим способом удаления любых скрытых файлов было бы:

 $pages = preg_grep('/^(?!.{1,2}$)/', $pages);
  

еще одним быстрым способом было бы использовать array_diff() .

 $pages = array_diff($pages, array('.', '..'));