За последние 24 часа нас посетили 16807 программистов и 1693 робота. Сейчас ищут 902 программиста ...

Помогите плиз завершить маленький скрипт!

Тема в разделе "PHP для новичков", создана пользователем fuss, 3 апр 2008.

  1. fuss

    fuss Активный пользователь

    С нами с:
    3 апр 2008
    Сообщения:
    2
    Симпатии:
    0
    Добрый день!
    Есть скрипт который выводит картинки на сайте рэндом(random).
    Скрипт работает, но от него требуеться чтобы он не просто выводил катринки рэндомом а еще чтоб они не повторялись!
    не могу добиться ни как этого результата
    вот скрипт:

    PHP:
    1.  
    2. <?php
    3. Error_Reporting(E_ALL & ~E_NOTICE);
    4.  
    5. $folder=opendir(".");
    6. while ($file = readdir($folder))
    7. $names[count($names)] = $file;
    8. closedir($folder);
    9.  
    10. sort($names);
    11.  
    12. $tempvar=0;
    13. for ($i=0;$names[$i];$i++){
    14. $ext=strtolower(substr($names[$i],-4));
    15. if ($ext==".jpg"||$ext==".gif"||$ext=="jpeg"||$ext==".png"){$names1[$tempvar]=$names[$i];$tempvar++;}
    16. }
    17.  
    18. srand ((double) microtime() * 10000000);
    19. $rand_keys = array_rand ($names1, 2);
    20.  
    21. $slika=$names1[$rand_keys[0]];
    22.  
    23. $dimensions = GetImageSize($slika);
    24. if ($pic==random){header ("Location: $slika");}
    25. else {echo "<img src=\"$slika\" $dimensions[3]>";}
    26. ?>
    27.  
    заранее благодарен!
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Код не смотрел. Первое, что пришло на ум - записывать в массив имя уже показанных картинок и проверять при рандоме новой, показывалась или нет. Если нужно, то загнать массив в сессии.
     
  3. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Как вариант, пиши $rand_keys в сессию.
     
  4. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Или наоборот - в массив запихать все картинки, потом выбрать рандомом какую-то, и тут же удалять из массива.
     
  5. fuss

    fuss Активный пользователь

    С нами с:
    3 апр 2008
    Сообщения:
    2
    Симпатии:
    0
    Спасиба огромное....догнал...вариант с удалением из массива элемента мне понравился....буду пробовать.
    Надо только с синтаксисом разобраться)))новичок йопты))))Спасиба Товарищи!!!
     
  6. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    fuss
    Как сделаешь, выложи свой вариант, а мы посмотрим, может и поправим где.
     
  7. vxc

    vxc Активный пользователь

    С нами с:
    6 апр 2008
    Сообщения:
    8
    Симпатии:
    0
    Неделю назад решал аналогичную проблему.
    Вот что получилось
    PHP:
    1.  
    2. <?
    3.  $n_foto=1;
    4.  $n_foto_show = 3;  // количество выводимых фотографий
    5.  $show=array();
    6.  $i = 0;  
    7.  $pictures = array();  
    8.  $handle=opendir('i/img_random');
    9.  while ($file = readdir($handle))
    10.     {  
    11.         if ($file == "." || $file == "..")   //пропускаем папки . и ..
    12.             continue;
    13.             $pictures[$i] = $file;
    14.             $i++;
    15.     }
    16.  closedir($handle);
    17.  
    18.   $i--;
    19.  $count=count($pictures);
    20.  
    21.  if ($count < $n_foto_show)    
    22.     {
    23.         echo 'Количество изобреажений в папке меньше чем требуется вывести уникальных изображений';
    24.         exit;
    25.     }
    26.  
    27.  while ($n_foto <= $n_foto_show)  
    28.     {
    29.         $random = rand(0,$i);  
    30.         if (in_array($random, $show, TRUE))    
    31.             {
    32.                 while(in_array($random,$show,false))  
    33.                     {
    34.                         $random = rand(2,$i);
    35.                     }
    36.             }
    37.    
    38.         echo "<center><img src='i/img_random/$pictures[$random]'></center><br>";  //выводим
    39.         $show[$n_foto]=$random; //записываем в массив выведенных
    40.         $n_foto++; //выполняем все еще раз   
    41.     }  
    42. ?>
    43.  
    конечно далеко от идеального алкоритма зато радует что сам сделал:)
    Понравилась идея с удалением из массива,сейчас буду переделывать:)
     
  8. Andrey5555

    Andrey5555 Активный пользователь

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев