Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Подскажите как изменить скрипт?  (Прочитано 2401 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Подскажите как изменить скрипт?
« : 01 Декабря 2009, 12:10:36 »
Помогите пожалуйста доработать скрипт.
Которій должен выводить случайную картинку на сайт, но проблема в том, что все картинки на фтп до тысячи имеют имя 0001.jpg , 0011.jpg, 0111.jpg , а пшп-код дает результат 1.jpg, 11.jpg, 111.jpg , тоесть несуществующую картинку выдает.
Как избежать такого вывода, чтоб перед именем файла "11.jpg" добавлялось "00".

Вот сам код:

<?php
// здесь задается цикл картинок
$pictures = range("1001","4564");
shuffle($pictures);
 ?>

<?php
// Цикл, выводящий картинку
  for ($i = 0; $i < 1; $i++)
      {
      $url = 'www.films.com/?page=item&id=';
echo '<td align = "center"><a href="http://'.$url.''.$pictures[$i].'" title="RANDOM MOVIE!" alt="Random Movies!"><img border="1" src="img/films/';
echo $pictures[$i];
echo '.jpg';
echo '" width="150" height="200"></td>';
     }
?>



Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Подскажите как изменить скрипт?
« Ответ #1 : 01 Декабря 2009, 12:48:57 »
sprintf("%04d", $pictures[$i])

Оффлайн kostryukov

  • Старожил
  • *
  • Сообщений: 1588
  • everybody lies
    • Просмотр профиля
    • kostryukov.net
Re: Подскажите как изменить скрипт?
« Ответ #2 : 01 Декабря 2009, 13:04:52 »
Цитировать
for ($i = 0; $i < 1; $i++) {... echo $pictures[$i] ...  }
:o
зачем цикл? -  echo $pictures["0"]
у меня можно спросить=)

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Подскажите как изменить скрипт?
« Ответ #3 : 01 Декабря 2009, 13:20:44 »
Думаю это затем, чтоб выводить несколько не повторяющихся ссылок. Вот еще вариант, без гигантского массива:
<?
$unique = array();
for ($i = 0; $i < 4; ++$i) {
do
$num = rand(1, 4564);
while (in_array($num, $unique));
$unique[] = $num;
$pic = sprintf("%04d.jpg", $num);
echo <<< _EOF
<td align="center"><a href="http://www.films.com/?page=item&id=$num" title="RANDOM MOVIE!" alt="Random Movies!">
<img border="1" src="img/films/$pic" width="150" height="200">
</td>
_EOF;
}
?>

Оффлайн kostryukov

  • Старожил
  • *
  • Сообщений: 1588
  • everybody lies
    • Просмотр профиля
    • kostryukov.net
Re: Подскажите как изменить скрипт?
« Ответ #4 : 01 Декабря 2009, 13:23:07 »
Цитировать
$i = 0; $i < 1
как тут выведет несколько? $i равно 0
у меня можно спросить=)

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Подскажите как изменить скрипт?
« Ответ #5 : 01 Декабря 2009, 13:31:29 »
Я думаю, что это просто задел, для теста...

Оффлайн bektau

  • Участник
  • *
  • Сообщений: 140
  • US 9.04, US 9.10 , Lucid 10.04 (fix)
    • Просмотр профиля
Re: Подскажите как изменить скрипт?
« Ответ #6 : 01 Декабря 2009, 14:09:27 »
<?php
$max 
1000;
$n rand(1,$max);
function 
lenImg ($n){
$len strlen($n);
switch (
$len) {
case 1$name '000'.$n; break;
case 2$name '00'.$n; break;
case 3$name '0'.$n; break;
case 4:
default : $name $n; break;
}
return 
$name;
}
echo 
lenImg ($n).'.jpg';
?>
//переменная $max задана по условию , но можно считывать кол-во объектов в папке и задавать значение.

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Подскажите как изменить скрипт?
« Ответ #7 : 01 Декабря 2009, 14:26:11 »
Круто то как! sprintf заменили на кучу кейсов. Так делают только матёрые пхпшники ))

Оффлайн bektau

  • Участник
  • *
  • Сообщений: 140
  • US 9.04, US 9.10 , Lucid 10.04 (fix)
    • Просмотр профиля
Re: Подскажите как изменить скрипт?
« Ответ #8 : 01 Декабря 2009, 14:48:34 »
 :) условие выполнено. и поф.

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Re: Подскажите как изменить скрипт?
« Ответ #9 : 01 Декабря 2009, 16:10:32 »
Цитировать
for ($i = 0; $i < 1; $i++) {... echo $pictures[$i] ...  }
:o
зачем цикл? -  echo $pictures["0"]

а это для того, чтоб сформировалась  ссылка по картинке на тот айди фильма, за который та картинка отвечает.
Проще говоря..  в этом скрипте не просто выводятся картинки.. но они еще являются ссылками на те фильмы.


Пользователь решил продолжить мысль 01 Декабря 2009, 12:12:51:
Цитировать
$i = 0; $i < 1
как тут выведет несколько? $i равно 0
в таком случае я буду рад, если меня поправят...
Дело в том что вначале этот скрипт был для вывода трех картинок.. но я сократил к одной лишь.

Пользователь решил продолжить мысль 01 Декабря 2009, 14:28:34:
<?php
$max 
1000;
$n rand(1,$max);
function 
lenImg ($n){
$len strlen($n);
switch (
$len) {
case 1$name '000'.$n; break;
case 2$name '00'.$n; break;
case 3$name '0'.$n; break;
case 4:
default : $name $n; break;
}
return 
$name;
}
echo 
lenImg ($n).'.jpg';
?>
//переменная $max задана по условию , но можно считывать кол-во объектов в папке и задавать значение.
Спасибо.

Пользователь решил продолжить мысль 01 Декабря 2009, 16:30:08:
Думаю это затем, чтоб выводить несколько не повторяющихся ссылок. Вот еще вариант, без гигантского массива:
<?
$unique = array();
for ($i = 0; $i < 4; ++$i) {
do
$num = rand(1, 4564);
while (in_array($num, $unique));
$unique[] = $num;
$pic = sprintf("%04d.jpg", $num);
echo <<< _EOF
<td align="center"><a href="http://www.films.com/?page=item&id=$num" title="RANDOM MOVIE!" alt="Random Movies!">
<img border="1" src="img/films/$pic" width="150" height="200">
</td>
_EOF;
}
?>
Благодарю.. с измененным скриптом даже вроде быстрее начало думать :)
И как-то более рендомно стало выдавать... ИМХО. :D
А если добавить выбору по БД.. сильно нагрузит сайт? если учесть что скрипт срабатывает при каждом нажатие на страничке..
« Последнее редактирование: 01 Декабря 2009, 16:30:08 от TrEK »

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Подскажите как изменить скрипт?
« Ответ #10 : 01 Декабря 2009, 18:45:32 »
Дело в том что вначале этот скрипт был для вывода трех картинок.. но я сократил к одной лишь.
Если надо одну, то можно вообще так:
$num = rand(1, 4564);
$pic = sprintf("%04d.jpg", $num);
echo <<< _EOF
<td align="center"><a href="http://www.films.com/?page=item&id=$num" title="RANDOM MOVIE!" alt="Random Movies!">
<img border="1" src="img/films/$pic" width="150" height="200">
</td>
_EOF;

А если добавить выбору по БД.. сильно нагрузит сайт? если учесть что скрипт срабатывает при каждом нажатие на страничке..
Что за данные и какого типа запрос на выборку? Вообще любые запросы к БД нагружают систему. Нужно стараться как можно больше иметь статики, особенно, если страничка главная.

Пользователь решил продолжить мысль 01 Декабря 2009, 21:47:39:
Да, и если по-хорошему, то к моей редакции надо еще добавить проверочку на то, чтобы не было количество слотов больше максимального id. Иначе скрипт повесится. Т.е.:
<?
$maxid = 4;
$slots = 4;
$unique = array();
for ($i = 0; $i < $slots; ++$i) {
do
$num = rand(1, $maxid);
while ($maxid >= $slots && in_array($num, $unique));
$unique[] = $num;
$pic = sprintf("%04d.jpg", $num);
echo <<< _EOF
<td align="center"><a href="http://www.films.com/?page=item&id=$num" title="RANDOM MOVIE!" alt="Random Movies!">
<img border="1" src="img/films/$pic" width="150" height="200">
</td>
_EOF;
}
?>
« Последнее редактирование: 01 Декабря 2009, 21:47:39 от Mam(O)n »

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Re: Подскажите как изменить скрипт?
« Ответ #11 : 01 Декабря 2009, 22:42:35 »
тоесть больше максимального id ?

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Подскажите как изменить скрипт?
« Ответ #12 : 01 Декабря 2009, 22:45:23 »
id фильма конечно же.

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Re: Подскажите как изменить скрипт?
« Ответ #13 : 02 Декабря 2009, 00:29:37 »
id фильма конечно же.
Не совсем понимаю, можно на примере, пожалуйста?

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Подскажите как изменить скрипт?
« Ответ #14 : 02 Декабря 2009, 01:08:19 »
Сейчас id фильма это непрерывная последовательность от 1 до 4564. На странице отображаются 4 картинки фильмов. Во всех четырёх ячейках по задумке должны отображаться только уникальные картинки. Так вот, например, если id фильма будет последовательностью от 1 до 3, то уникально в 4-х ячейках картинки никак не расположить, т.к. ячеек больше, чем всего фильмов. Посему нужна проверка на то, что фильмов должно быть больше или равно количеству ячеек, и если это не так, то отключается проверка на уникальность.

 

Страница сгенерирована за 0.779 секунд. Запросов: 25.