#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('.', '..'));