Создать форум бесплатно: ixbb.ru :: Календарь на Май 2024 года: calendar2008.ru/2024/may/

  Reply to this topicStart new topicStart Poll

Скрипт показа картинки

gregst
Отправлено: Jan 10 2011, 05:28 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1012
Пользователь №: 1169
Регистрация:
28-September 07



Итак, гуру пхп
есть скрипт
CODE
<?php
$path = "assets/gallery/$folder/";

if(!isset($folder)) return; // no folder? quit.
$slides = array();
if ($dh = @opendir($path)) {
 while(($file = readdir($dh)) !== false) {
    if ( !preg_match('/\.thumb*/',$file) && preg_match('@.png$|.gif$|.jpg$@', $file) && $file != '.' && $file != '..' ) {
     $slides[] = $path.$file;
   }
 }          
}

$num = count($slides);
$last = $num-1;
for ( $i=0; $i<=($count-1); $i++) {
echo '<img src="'.$slides[$i].' " alt="" width="'.$width.'" height="'.$height.'"/>';}
?>


Надо, что б выводились не первые n картинок, а случайные n картинок

Вопрос - как?

ps в параметрах вызова передается название необходимой папки, ширина и высота фоток
PMEmail Poster
Top
Матроскин
Отправлено: Jan 10 2011, 06:56 PM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 245
Пользователь №: 2581
Регистрация:
9-June 09



В скрипте есть ошибки:
CODE
for ( $i=0; $i<=($count-1); $i++)

$count нигде не определена... определены 2 переменные, связанные со счетом элементов массива - $num и $last
правильнее будет так:
CODE
for ($i=0; $i < count($slides); $i++)


Случайный вывод картинок можно сделать так:
CODE
<?php
$path = "gallery/";
$num = 20; // количество выводимых случайно картинок

$slides = array();
if ($dh = @opendir($path)) {
while(($file = readdir($dh)) !== false) {
   if ( !preg_match('/\.thumb*/',$file) && preg_match('@.png$|.gif$|.jpg$@', $file) && $file != '.' && $file != '..' ) {
    $slides[] = $path.$file;
  }
}
}

if($num >= count($slides)) $num = count($slides); // если значение $num больше, чем есть картинок в каталоге, то приравниваем значение $num кол-ву картинок

for($i = 0; $i < $num; $i++){
   $rand = rand(0, count($slides)-1); // генерируем случайное число от 0 до кол-ва картинок в массиве
   echo '<p><img src="'.$slides[$rand].'" height="40" /></p>';
}
?>


--------------------
PMEmail PosterUsers Website
Top
gregst
Отправлено: Jan 10 2011, 07:12 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1012
Пользователь №: 1169
Регистрация:
28-September 07



$count передается как параметр в скрипт. это не постоянная величина и для каждого вызова она может отличаться

отлично, теперь все заработало как надо, спасибо =)
PMEmail Poster
Top
Матроскин
Отправлено: Jan 10 2011, 09:07 PM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 245
Пользователь №: 2581
Регистрация:
9-June 09



Пожалуйста wink.gif


--------------------
PMEmail PosterUsers Website
Top
Матроскин
Отправлено: Jan 11 2011, 10:26 AM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 245
Пользователь №: 2581
Регистрация:
9-June 09



Кстати, выводимые случайным образом картинки могут повторяться с таким кодом. Может, конечно, так и нужно... но, если нужно, чтобы картинки не повторялись, то код можно немного дописать - вот этот блок будет таким:
CODE
if($num > count($slides)) $num = count($slides); // если значение $num больше, чем есть картинок в каталоге, то приравниваем значение $num кол-ву картинок

for($i = 0; $i < $num; $i++){
   $rand = rand(0, count($slides)-1); // генерируем случайное число от 0 до кол-ва картинок в массиве
   echo '<p><img src="'.$slides[$rand].'" height="40" /></p>';
   unset($slides[$rand]); // уничтожаем в массиве выведенный элемент
   $slides = array_values($slides); // переписываем массив, чтобы ключи шли по порядку
}

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


--------------------
PMEmail PosterUsers Website
Top
gregst
Отправлено: Jan 12 2011, 01:46 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1012
Пользователь №: 1169
Регистрация:
28-September 07



я вот так сделал в результате

CODE
<?php
$path = "assets/gallery/$folder/";
$slides = array();
if ($dh = @opendir($path)) {
while(($file = readdir($dh)) !== false) {
  if ( !preg_match('/\.thumb*/',$file) && preg_match('@.png$|.gif$|.jpg$@', $file) && $file != '.' && $file != '..' ) {
   $slides[] = $path.$file;
 }
}
}
if($count >= count($slides)) $count = count($slides);
$rand = array_rand($slides, $count);


foreach ($rand as $v) {
 echo '<img src="'.$slides[$v].'" width="'.$width.'" height="'.$height.'" />';
}
?>
PMEmail Poster
Top

Topic Options Reply to this topicStart new topicStart Poll

 



[ Script Execution time: 0.0211 ]   [ 10 queries used ]   [ GZIP выключен ]