Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод случайной картинки из заданого списка 
V
    Опции темы
NaglfarNight
Дата 3.9.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 10.12.2007
Где: Россия, г. Нижний Новгород

Репутация: нет
Всего: 3



Здравствуйте, друзья.

Мне нужно на странице моего сайта каждый день выводить три случайные картинки из заданного списка (все картинки находятся в одной папке).

Примерно так:
user posted image

Только это я вывожу вручную.

Подскажите, пожалуйста.


PM MAIL WWW ICQ   Вверх
bars80080
Дата 3.9.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



если есть список, массив то есть с путями к картинкам, то остаётся сделать три случайных числа, неповторяющихся

Код

$mv = array(); // список путей
$kol = count($mv);
$t = array();

$max = 3;
if($kol > $max) {
$i = 0;
while($i < $max) {
$c = rand(0, $kol - 1);
if(array_search($c, $t) === flase) {
$t[$i] = $c; $i++;
}
}}
else $t = $mv;
дальше просто подставить эти три путя
PM MAIL WWW   Вверх
HackMan
Дата 3.9.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 8
Всего: 9



bars80080, зачем придумывать, то что уже придумано, и придумано намного проще  smile 
Код

  $data = range(1, 3);
  shuffle($data);


NaglfarNight,  всё зависит от того, как устроена структура сайта. Уточни, данные об изображениях хранятся в базе или просто в отдельной папке набор картинок?

a) Если в базе и картинок не так много, тогда делай запрос
Код

SELECT path FROM images ORDER BY RAND() LIMIT 3

Если же в базе записей много, тогда ORDER BY RAND() лучше не использовать - сильно грузит сервер. Надо будет сначала сгенерировать 3 случайных числа, сделать из них индексы а потом сделать выборку простым SELECT

b) Если это просто набор файлов в папке, тогда что-то вроде такого
Код

  $images = glob('*.jpg');
  shuffle($images);
  array_splice($images, 3);


Это сообщение отредактировал(а) HackMan - 3.9.2008, 14:30


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
NaglfarNight
Дата 3.9.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 10.12.2007
Где: Россия, г. Нижний Новгород

Репутация: нет
Всего: 3



HackMan
Без базы.
Просто набор картинок в папке.

Я тормоз в вопросах php  smile 
Путь до папки с картинками прописывать где? Тут 
Код

$images = glob('*.jpg');
 ? Или я что-то опять не понимаю?  smile 

Это сообщение отредактировал(а) NaglfarNight - 3.9.2008, 15:08
PM MAIL WWW ICQ   Вверх
Ockonal
Дата 3.9.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Smile
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 9.7.2007
Где: Ukraine::Nikolaev ;

Репутация: 1
Всего: 3



Код

$path_to_img = "/images/";    // Дирректория с картинками
$num_of_show = 3;        // Сколько выводить
$imgs = 50;                    // Сколько картинок всего

$temp[$num_of_show-1];    // Хранилище для картинок, которые будем выводить


for( $i=0;$i<=$num_of_show;i++ ) {
    $rand = rand( 0,$num_show );
    $temp[$i] = $path_to_img.$rand.".jpg";
};

// Теперь у вас есть массив $temp, в котором адреса тех 3 рисунков( или сколько нужно )
// Выводить так:
for( $i=0;$i<=$num_of_show;i++ ) {
    echo "<img src=".$temp[$i]." /> <br />";
};

$path_to_img - меняете на свою папку
Все рисунки должны быть такого типа:
1.jpg
2.jpg и т.д.
если вам нужно выводить отдельно все 3 ( или сколько ) рисунков:
Код

echo "<img src=".$temp[ИНДЕКС]." /> <br />";

Вместо "ИНДЕКС" - номер рисунка-1

Это сообщение отредактировал(а) Ockonal - 3.9.2008, 15:35
--------------------
Ум заключается не только в знании, но и в умении прилагать знание на деле.Самое лучшее из всех доказательств есть опыт.Каждому человеку свойственно ошибаться, но никому, кроме глупца, несвойственно упорствовать в ошибке.
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
NaglfarNight
Дата 3.9.2008, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 10.12.2007
Где: Россия, г. Нижний Новгород

Репутация: нет
Всего: 3



Ockonal
Выдаёт ошибку:

Цитата

Parse error: syntax error, unexpected T_INC, expecting ')' on line 6   
 :(
PM MAIL WWW ICQ   Вверх
s0lman
Дата 3.9.2008, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



NaglfarNight, попробуйте этот скриптик - специально для вас изменил;)

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  rnd.rar 1,02 Kb


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
Ockonal
Дата 3.9.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Smile
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 9.7.2007
Где: Ukraine::Nikolaev ;

Репутация: 1
Всего: 3



Код

for( $i=0;$i<=$num_of_show;i++ ) {
    $rand = rand( 0,$num_show );
    $temp[$i] = $path_to_img.$rand.".jpg";
};

Ошибся, извините... 
Выше исправьте на:
Код

for( $i=0;$i<=$num_of_show; $i++ ) {
    $rand = rand( 0,$num_show );
    $temp[$i] = $path_to_img.$rand.".jpg";
};



Это сообщение отредактировал(а) Ockonal - 3.9.2008, 16:52
--------------------
Ум заключается не только в знании, но и в умении прилагать знание на деле.Самое лучшее из всех доказательств есть опыт.Каждому человеку свойственно ошибаться, но никому, кроме глупца, несвойственно упорствовать в ошибке.
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
HackMan
Дата 4.9.2008, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 8
Всего: 9



NaglfarNight, да, тут

Ockonal, у меня есть папка images, в ней 866 картинок. Сделаем сравнительный тест моего кода с исправленным твоим

а)
Код

  $start = microtime(true);

  $images = glob('images/*.jpg');
  shuffle($images);
  array_splice($images, 3);

  $end = microtime(true); 

  echo ($end - $start);

В результате получаем 0.000214099884033

б)
Код

  $start = microtime(true);

  $path_to_img = "/images/";    // Дирректория с картинками
  $num_of_show = 3;        // Сколько выводить
  $imgs = 50;                    // Сколько картинок всего
  $temp[$num_of_show-1];    // Хранилище для картинок, которые будем выводить

  for ($i=0; $i<=$num_of_show; $i++)
    {
      $rand = rand(0, $imgs);
      $temp[$i] = $path_to_img.$rand . ".jpg";
    };

  $end = microtime(true);
  
  echo ($end - $start);

В результате получаем 0.000100135803223

Разница во времени составляет 0,00011396408081 сек. Разница в коде - 3 строчки против 9, и мой код в несколько раз прозрачней для понимания, да и ко всему в твоём коде картинки должны иметь пронумерованные имена, подряд, без пропуска, да и очень большой шанс, что сгенерируется несколько одинаковых чисел smile я уже не говорю, про то, что массив $temp у тебя нигде не объявлен как массив и вылетит ошибка. Видимо, код выдранный тупо откуда-то и предназначен для конкретной задачи.

Спасибо за внимание   smile 

Это сообщение отредактировал(а) HackMan - 4.9.2008, 08:09


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
s0lman
Дата 4.9.2008, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



HackMan, у меня ваш код выдал 0.031064987182617
тогда как мой -  0.18256306648254  smile 

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




--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
Ockonal
Дата 4.9.2008, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Smile
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 9.7.2007
Где: Ukraine::Nikolaev ;

Репутация: 1
Всего: 3



HackMan
Цитата

я уже не говорю, про то, что массив $temp у тебя нигде не объявлен как массив и вылетит ошибка. Видимо, код выдранный тупо откуда-то и предназначен для конкретной задачи.

Код ни от куда не выдранный. Я не программист пхп...  Просто желание помочь.
На счет массива - спасибо, я забыл об этом.

Добавлено через 2 минуты и 56 секунд
Цитата

и мой код в несколько раз прозрачней для понимания

Извините, конечно, может это зависит от моих знаний, но ваш код мне кажется сложнее. И, как раз, 
мой более прозрачный. Согласитесь smile Я соглашусь, что Ваш более эфективный.
--------------------
Ум заключается не только в знании, но и в умении прилагать знание на деле.Самое лучшее из всех доказательств есть опыт.Каждому человеку свойственно ошибаться, но никому, кроме глупца, несвойственно упорствовать в ошибке.
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
MoLeX
Дата 4.9.2008, 15:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



HackMan
Ockonal, может не будем выяснять у кого код круче и понятнее?  smile 

NaglfarNight, вопрос решен? если да то отметь пожалуйста его соответствующим образом.


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
NaglfarNight
Дата 5.9.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 10.12.2007
Где: Россия, г. Нижний Новгород

Репутация: нет
Всего: 3



MoLeX
Неа... вопрос ещё не решён. Прошу простить меня за тупость, я с самыми простейшими задачами в пхп справляюсь за сутки, а то и больше  smile 

HackMan
Ваш код привлекает столь маленьким объёмом.
Так... где прописывать дирректорию с картинками понятно. Путь абсолютный? 
А выводим как? smile 

PM MAIL WWW ICQ   Вверх
HackMan
Дата 5.9.2008, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 8
Всего: 9



NaglfarNight, путь можно как относительный, так и абсолютный. Удобнее - относительный.

Выводить примерно так:
Код

<?php
  foreach ($images as $image)
    {
      echo '<img src="' . $image . '">';
    }
?>


Это сообщение отредактировал(а) HackMan - 5.9.2008, 14:31


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
NaglfarNight
Дата 5.9.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 10.12.2007
Где: Россия, г. Нижний Новгород

Репутация: нет
Всего: 3



HackMan
Вставляю на страничку 
Код

 <?php   
  $images = glob('/images/avatars/*.jpg');
  shuffle($images);
  array_splice($images, 3);
  
 foreach ($images as $image)
    {
      echo '<img src="' . $image . '">';
    }
  ?>


Не работает. Может что-то неверно делаю  smile 

Код Ockonal работает, но иногда почему-то вместо заданых 3-х изображений выводит либо 2, либо 4. 
Ockonal, для Вашего кода нужно, чтобы все картинки были названы в духе 001.jpg, 002.jpg? Или не важно?

Это сообщение отредактировал(а) NaglfarNight - 5.9.2008, 17:20
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0947 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.