Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ротатор картинок
 
 автор: Skima   (27.11.2008 в 10:36)   письмо автору
 
 

Приветствую. Поставил себе задачу сделать ротатор картинок, который не покажет за один день одному и тому же пользователю одну и ту же картинку дважды. Может быть когда-нибудь мутирую его в ротатор баннеров.

Возник вопрос реализации выбора рандомной картинки. Делаю так:

function show_banner($dir, & $files)
{
    $attempts = 0;
    for($i=0; $i<count($files); $i++)
    {
        if($files[$i]["shown"] == 1)
            $attempts++;
    }
    if($attempts == count($files))
        echo "Вы посмотрели все баннеры";
    else
    {
        $id = rand(0, count($files)-1);
        if($files[$id]["shown"] != 1)
        {
            echo "<img src=".$dir.$files[$id]["name"]."><br>".$files[$id]["name"]."<br>";
            $files[$id]["shown"] = 1;
            return true;
        }
        else
            show_banner($dir, $files);
    }
return false;
}


То есть при каждой загрузке страницы с баннером скрипт проходит по всему массиву названий картинок и смотрит, какие уже показывал. Если показал все, бездельничает, если нет, начинает рандомить случайные номера в этом массиве, пока не найдет не показанную картинку. Если картинок относительно немного, это не будет тормозить, а будет ли это тормозить, если картинок и запросов много? В общем, какие можете дать советы?

  Ответить  
 
 автор: Trianon   (27.11.2008 в 11:22)   письмо автору
 
   для: Skima   (27.11.2008 в 10:36)
 

$files у Вас в сессии живет чтоли?
1 вариант . Убрать рандом. Ибо не нужен.
2. В первом цикле собирать индексы непоказанных картинок в массив. И извлекать произвольный элемент уже из этого массива.

  Ответить  
 
 автор: Skima   (27.11.2008 в 11:44)   письмо автору
 
   для: Trianon   (27.11.2008 в 11:22)
 

$files обитает в сессии.
1. Хмм... а как тогда показывать случайную картинку из доступных? Если простым проходом цикла это выполнять, то первый баннер в списке будет показываться каждый день, а до 1024го врядли пользователь докликается.
Кстати, пока писал, подумал о перемешивании массива имён картинок до прохода цикла. Это имелось в виду? Тогда да, тогда всё честно )

2. В первом собираем непоказанные, перемешиваем, показываем циклом. Ага, понял. Спасибо.

Есть ещё какие-нибудь улучшения? ) Я жаден до них...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования