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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Испрвление скрипта отображающего картинки. 
:(
    Опции темы
bigshot
  Дата 18.9.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте не могли бы вы помочь решить одну проблему?Существует код который реализует случайную выборку изображений из папки, пролема заключается в том что случайные значения часто повторяются вот код: 
Код

$i = count($the_image);
$random = mt_rand(0, $i - 1);
$image_name = $the_image[$random];

Как сделать что бы значения не повторялись??? smile 
PM MAIL   Вверх
zibox86
Дата 18.9.2008, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вести лог уже выпавших числе!
PM MAIL WWW   Вверх
bigshot
Дата 18.9.2008, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну что ни кто не может осилить??? smile 
PM MAIL   Вверх
bars80080
Дата 18.9.2008, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



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

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


вот у меня увереность, что у тебя там в цикле выдаются несколько изображений, но точно не знаю
PM MAIL WWW   Вверх
bigshot
Дата 19.9.2008, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот такой вот код:
Код


defined( '_VALID_MOS' ) or die( 'Доступ ограничен' );

global $mosConfig_absolute_path, $mosConfig_live_site;

$type            = $params->get( 'type', 'jpg' );
$folder        = $params->get( 'folder' );
$link            = $params->get( 'link' );
$width            = $params->get( 'width' );
$height        = $params->get( 'height' );
$the_array        = array();
$the_image        = array();
$all_random=Array();

if ( strpos($folder, $mosConfig_live_site) === 0 ) {
    $folder = str_replace( $mosConfig_live_site, '', $folder );

if ( strpos($folder, $mosConfig_absolute_path) === 0 ) {
    $folder= str_replace( $mosConfig_absolute_path, '', $folder );

if ( strpos($folder, '/') !== 0 ) {    
    $folder = '/'. $folder;

$abspath_folder = $mosConfig_absolute_path . $folder;
// check if directory exists
if (is_dir($abspath_folder)) {
    if ($handle = opendir($abspath_folder)) {
        while (false !== ($file = readdir($handle))) {
            if ($file != '.' && $file != '..' && $file != 'CVS' && $file != 'index.html' ) {
                $the_array[] = $file;
            }
        }
    }
    closedir($handle);

    foreach ($the_array as $img) {
        if (!is_dir($abspath_folder .'/'. $img)) {
            if (eregi($type, $img)) {
                $the_image[] = $img;
            }
        }
    }

    if (!$the_image) {
        echo _NO_IMAGES;
    } else {

    $i = count($the_image);
    $random = mt_rand(0, $i - 1);
    $image_name = $the_image[$random];
    $abspath_image    = $abspath_folder . '/'. $image_name;
        $size            = getimagesize ($abspath_image);

    if ($width == '') {
            ($size[0] > 100 ? $width = 100 : $width = $size[0]);
    }
    if ($height == '') {
        $coeff = $size[0]/$size[1];
        $height = (int) ($width/$coeff);
    }

        $image = $mosConfig_live_site . $folder .'/'. $image_name;


    ?>
    <div align="center">
    <?php
    if ($link) {
        ?>
        <a href="<?php echo $link; ?>" target="_self">
        <?php
    }
    ?>
    <img src="<?php echo $image; ?>" border="0" width="<?php echo $width; ?>" height="<?php echo $height; ?>" alt="<?php echo $image_name; ?>" /><br />
    <?php
    if ($link) {
        ?>
        </a>
        <?php
    }
    ?>
    </div>
    <?php
    }
}
?>

Я видел есть стандартная функция для удаления повторяющихся элементов я применял у меня не работает smile 
PM MAIL   Вверх
bars80080
Дата 19.9.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



ну что значит повторяющиеся значения? а откуда ты будешь знать, есть ли эти повторяющиеся значения? были ли они при предыдущем проходе?

надо вести лог выдаваемых файлов, что-то вроде:

Код

<?php
function get_rnd_file($p, $s = 'filesave.txt') {
    if(file_exists($s)) { $a = file($s); }
    $o = opendir($p); $i = $k = 0; $b = 1000000000; $m = array(); $e = array();
    if(!empty($o)) { while($f = readdir($o)) {
            if($f == '.' or $f == '..') continue;
            if(!is_file($p.$f)) continue;
            
            $n = 0;
            for($j = 0; isset($a[$j]); $j++) {
                $d = explode(';', $a[$j]);
                if($d[0] == $f) { $n = $d[1]; break; }
            }
            $m[$i]['name'] = $f; $m[$i]['num'] = trim($n);
            if($n < $b) { $b = $n; $e = array(); $e[0] = $f; $k = 1; }
            elseif($n == $b) { $e[$k] = $f; $k++; }
            $i++;
    }}
    $c = count($e); $g = rand(0, ($c - 1));
    $str = ''; 
    for($i = 0; isset($m[$i]['name']); $i++) {
        if($e[$g] == $m[$i]['name']) { $m[$i]['num']++; }
         $str .= $m[$i]['name'].';'.$m[$i]['num']."\r\n";
    } 
    $fp = @fopen($s, 'w');
    if($fp) { fwrite($fp, $str); fclose($fp); }
    return $e[$g];
}

$r = get_rnd_file('path/');
echo $r.'<br />'.date('j F Y H:i:s');

?>


Добавлено через 1 минуту и 49 секунд
кстати, лог можно использовать в качестве счётчика
PM MAIL WWW   Вверх
bigshot
Дата 19.9.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



На сайте www.leilytravel.kz можно увидеть что картинки повторяются станд-ая функция  mt_rand(0, $i - 1); выводит 12 случайных чисел доустим 1,2,3,4,4,4,5,6,99 и.т.д до двенадцати.Получается числа присваеваются обсалютным путям а если 4,4,4 тогда выводятся одинаковые картинки.Просто если посмотреть сайт все станет понятно. Я начинающий программер не могу разобратся!!!! smile  

Это сообщение отредактировал(а) bigshot - 19.9.2008, 11:46
PM MAIL   Вверх
teroni
Дата 19.9.2008, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может типа такого надо?
Код

$numbers = range(1, 12);
shuffle($numbers);
foreach($numbers as $number)
   echo $number.' ';


Это сообщение отредактировал(а) teroni - 19.9.2008, 12:06
PM MAIL   Вверх
bigshot
Дата 22.9.2008, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проблема так и не решена!!!Все равно одно и то же происходит smile 
PM MAIL   Вверх
bigshot
Дата 24.9.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Короче я че то написал кто может исправить что нибудь буду благодарен:
Код


<?php


// запрет прямого доступа
defined( '_VALID_MOS' ) or die( 'Доступ ограничен' );

global $mosConfig_absolute_path, $mosConfig_live_site;

$type            = $params->get( 'type', 'jpg' );
$folder        = $params->get( 'folder' );
$link            = $params->get( 'link' );
$width            = $params->get( 'width' );
$height        = $params->get( 'height' );
$the_array        = array();
$the_image        = array();

// if folder includes livesite info, remove
if ( strpos($folder, $mosConfig_live_site) === 0 ) {
    $folder = str_replace( $mosConfig_live_site, '', $folder );
}
// if folder includes absolute path, remove
if ( strpos($folder, $mosConfig_absolute_path) === 0 ) {
    $folder= str_replace( $mosConfig_absolute_path, '', $folder );
}
// if folder doesnt contain slash to start, add
if ( strpos($folder, '/') !== 0 ) {    
    $folder = '/'. $folder;
}
// construct absolute path to directory
$abspath_folder = $mosConfig_absolute_path . $folder;
// check if directory exists
if (is_dir($abspath_folder)) {
//если $abspath_folder директория то
    if ($handle = opendir($abspath_folder)) {
//если директория открыта
        while (false !== ($file = readdir($handle))) {
//пока не false читаем директорию
            if ($file != '.' && $file != '..' && $file != 'CVS' && $file != 'index.html' ) {
                $the_array[] = $file;
            }
        }
    }
    closedir($handle);

    foreach ($the_array as $img) {
        if (!is_dir($abspath_folder .'/'. $img)) {
            if (eregi($type, $img)) {
                $the_image[] = $img;
            }
        }
    }

    if (!$the_image) {
        echo _NO_IMAGES;
    } else {

    $i = count($the_image);
    $random = mt_rand(0, $i - 1);
        for($n=0;$n<5;$n++){
        $array[$n]=$random;
        }
        $elem=$array[$n];
        for($c=0;$array;$c++){
        if($elem==$array[$c]){
        $array[$c]=$array[$c]+1;
        }else{
        $array[$c]=$image_name;
    $abspath_image    = $abspath_folder . '/'. $image_name;
        $size            = getimagesize ($abspath_image);

    if ($width == '') {
            ($size[0] > 100 ? $width = 100 : $width = $size[0]);
    }
    if ($height == '') {
        $coeff = $size[0]/$size[1];
        $height = (int) ($width/$coeff);
    }

        $image = $mosConfig_live_site . $folder .'/'. $image_name;


    ?>
    <div align="center">
    <?php
    if ($link) {
        ?>
        <a href="<?php echo $link; ?>" target="_self">
        <?php
    }
    ?>
    <img src="<?php echo $image; ?>" border="0" width="<?php echo $width; ?>" height="<?php echo $height; ?>" alt="<?php echo $image_name; ?>" /><br />
    <?php
    if ($link) {
        ?>
        </a>
        <?php
    }
    ?>
    </div>
    <?php
    }
}
}
?>

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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