[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод изображений нескольких расширений, warning
alex455
Здравствуйте. Не могу найти решение для такой ситуации. Созал массив расширений картинок для вывода:

<?php

$extension = array('*.jpg', '*.jpeg', '*.png', '*.bmp', '*.gif');

foreach ($extension as $current_extension)
{
$images = glob('pictures/' . $current_extension);

foreach ($images as $image)
{
$img_name = explode('/', $image);
$img_name = $img_name[1];
echo "<p><img src=\"$image\"><br>
<tt>
$img_name</tt><br>
<a href=
\"remove-picture.php?$img_name\">Удалить</a></p><hr><br>";
}
}


?>

Вывод изображений работает, но вместе с ним внизу появляются
Warning: Invalid argument supplied for foreach() in /srv/http/g/pictures.php on line 44
Warning: Invalid argument supplied for foreach() in /srv/http/g/pictures.php on line 44


Файлы в директории с картинками:
  • 541.jpg
  • DX-Winter-Snow-Screensaver_1.png
  • peluche-php.jpg
  • php.png
  • poets_walk_winter-fm1.jpg
  • win1ter.jpg
  • winter1.jpg
  • winter_depression1.jpeg
  • winter.jpg
  • winter-scene.jpg
Я так понимаю, что причина в отсутствии файлов всех расширений? Если так, то как можно не допустить итерации foreach для тех расширений, файлов которых сейчас нет в директории с картинками?



Спустя 2 часа, 29 минут, 53 секунды (2.07.2012 - 18:13) inpost написал(а):
$images = массив, по крайней мере должен быть.
Перед запуском цикла проверяй на is_array и count() - ведь хотя бы 1 элемент должен быть для того, чтобы запустить внутренний цикл.

Спустя 6 минут, 2 секунды (2.07.2012 - 18:19) alex455 написал(а):
А какой функцией не допустить итерацию в случае пустого массива?
foreach ($extension as $current_extension)
{
$images = glob('pictures/' . $current_extension);
if (count($images) < 1) break; # ---------------------------------------------- тут

foreach ($images as $image)
{
$img_name = explode('/', $image);
$img_name = $img_name[1];
echo "<p><img src=\"$image\"><br>
<tt>
$img_name</tt><br>
<a href=
\"remove-picture.php?$img_name\">Удалить</a></p><hr><br>";
}
}

Так не работает. Всё тоже самое получается на выводе.

Спустя 4 минуты, 45 секунд (2.07.2012 - 18:23) inpost написал(а):
ты пропустил то, что я сказал smile.gif
К тому же надо не обрывать цикл полностью, а лишь 1 инерцию.

Спустя 31 минута, 6 секунд (2.07.2012 - 18:55) alex455 написал(а):
inpost, я не пропустил is_array, я просто не знаю, как его тут использовать можно.

Цитата
К тому же надо не обрывать цикл полностью, а лишь 1 инерцию.

Как бы ты это сделал?

Спустя 22 минуты, 4 секунды (2.07.2012 - 19:17) ИНСИ написал(а):
foreach (glob('pictures/*.{jpg,jpeg,png,bmp,gif}') as $data) {
echo $data . '<br />';
// и т.д. что тебе необходимо сделать с этими файлами
}

Спустя 9 минут, 38 секунд (2.07.2012 - 19:26) inpost написал(а):
if(is_array($var) && count($var)) {
//вывод
}


А второй вопрос: что такое break; и какая есть альтернатива для прекращения лишь 1 инерции цикла? Первая буква c... , вторая o... третья n...

Спустя 1 час, 28 минут, 35 секунд (2.07.2012 - 20:55) alex455 написал(а):
Разобрался, спасибо.
foreach ($extension as $current_extension)
{
$images = glob('pictures/' . $current_extension);
if (!is_array($images)) continue; # и count() не нужен.

foreach ($images as $image)
{
$img_name = explode('/', $image);
$img_name = $img_name[1];
echo "<p><img src=\"$image\"><br>
<tt>
$img_name</tt><br>
<a href=
\"remove-picture.php?$img_name\">Удалить</a></p><hr><br>";
}
}

Спустя 1 минута, 50 секунд (2.07.2012 - 20:57) inpost написал(а):
smile.gif

Спустя 1 час, 28 минут, 27 секунд (2.07.2012 - 22:25) ИНСИ написал(а):
alex455 интересно чем мой вариант не подходит? Быстрее, лучше и компактнее )

Спустя 12 часов, 45 минут, 19 секунд (3.07.2012 - 11:10) alex455 написал(а):
Он не сработал. Жаловался, что glob('pictures/*.{jpg,jpeg,png,bmp,gif}') - неверный параметр для foreach.

Спустя 47 минут, 12 секунд (3.07.2012 - 11:58) ИНСИ написал(а):
foreach (glob('pictures/*.{jpg,jpeg,png,bmp,gif}', GLOB_BRACE) as $data) {
echo $data . '<br />';
// и т.д. что тебе необходимо сделать с этими файлами
}

Попробуй так. Я забыл GLOB_BRACE дописать

Спустя 46 минут, 47 секунд (3.07.2012 - 12:44) alex455 написал(а):
ИНСИ, да, работает. Вот теперь не знаю, какой вариант использовать - с шоколадом или ванилью. biggrin.gif

Спустя 1 час, 26 минут, 52 секунды (3.07.2012 - 14:11) ИНСИ написал(а):
Цитата
с шоколадом или ванилью

Ну, второй вариант - шоколад с солью )

Спустя 10 минут, 3 секунды (3.07.2012 - 14:21) inpost написал(а):
alex455
Бери банан с перцем!
А вообще, если попадаешь в такую ситуацию - делай замеры на скорость работы.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.