Неправильная работа функции array_rand

dimagolov

Новичок
tf, с чего ты взял, что crc32 от подстроки md5 чего-то там будет давать равномерное распределение? И зачем надо брать подстроку из середины шестнадцатеричного представления md5, а не от всего этого представления или скажем не часть (32 или 64 бита в зависимости от платформы) из 128 бит md5?
 

tf

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

DiMA

php.spb.ru
Команда форума
можно сделать демона, который будет генерить случайные числа для *srand()* в пхп

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

демон (пара строк кода - цикл с записью очередного rand и sleep) каждые несколько секунд пишет в файл или мемкеш очередное случайное число, пхп хавает, юзает srand
 

tf

крылья рулят
ну зачем?
пускай едет на unix если у него критичность рандомный данных
 

DiMA

php.spb.ru
Команда форума
что зачем? Это написать быстрее, чем здесь туфту строчить.
 

WEB-6

Новичок
В 2007 году еще заметил баг функции array_rand(). Написал аналог, - может кому пригодится.

PHP:
    function array_rand_analog($input, $num_req=1)
    {
        $num_req=(int) $num_req;
        if(!$num_req) return array();

        $count=count($input);
        unset($input);

        if(!$count) return array();
        if($num_req>$count) $num_req=$count;

        $array=array();
        while($num_req--)
        {
            do
            {
                $j=mt_rand(0, $count-1);
            }while(isset($array[$j]));

            $array[$j]=$j;
        }

        return array_values($array);
    }
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
мне кажется og в названии функции лишнее лучше no
 

WEB-6

Новичок
мне кажется og в названии функции лишнее лучше no
Не важно как я ее тут назвал, - это не принципиально. 2016 год, - проблема функции осталась.
Не везде array_rand работает стабильно.
Софт с использованием встроенной функцией глючит в неподходящие моменты.
Костыль работает быстро, надежно, - потери в производительности незначительные.
Не нравится приставка в названии, пусть будет так:
PHP:
    /**
     * @param $input
     * @param int $num_req
     * @return array
     */
    public static
    function array_rand($input, $num_req=1)
    {

        $num_req=(int) $num_req;
        if(!$num_req) return array();

        $count=count($input);
        unset($input);

        if(!$count) return array();
        if($num_req>$count) $num_req=$count;

        $array=array();
        while($num_req--)
        {
            do
            {
                $j=mt_rand(0, $count-1);
            }while(isset($array[$j]));
            $array[$j]=$j;
        }

        return array_values($array);
    }
 

Adelf

Administrator
Команда форума
Я товарища Web-6 забанил. за мат и....если честно за бесполезность его присутствия здесь. сообщение с матом удалил. Если кто против - высказывайтесь.
 

WMix

герр M:)ller
Партнер клуба
блин, хотел узнать как класс называется
 
Сверху