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

Форум PHP

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

 

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

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

тема: 3 случайных неповторяющихся числа
 
 автор: RV   (15.10.2005 в 11:59)   письмо автору
 
 

существует ли относительно простой способ сделать 3 случайных непоторяющихся числа из данных? к примеру дан массив $s = array(1,3,5,6,4,56,23,98,15) и из него надо взять три случайных разных числа?

   
 
 автор: localGhost   (15.10.2005 в 12:25)   письмо автору
 
   для: RV   (15.10.2005 в 11:59)
 

<?
srand 
((float) microtime() * 10000000);
$s = array (1356456239815);
/*
mixed array_rand (array input [, int num_req])

array_rand() может пригодиться, если вы захотите извлечь из массива одно или более 
произвольно выбранных вхождений. Функция принимает массив input и необязательный 
аргумент num_req, который специфицирует, сколько вхождений вы хотите извлечь - если 
не специфицирует, по умолчанию будет 1.

Если вы извлекаете только одно вхождение, array_rand() возвращает ключ произвольного 
вхождения. Иначе возвращает массив ключей для случайных вхождений. Таким образом вы 
можете извлечь из массива случайно выбранные ключи и значения.

Не забудьте вызвать srand() для включения генератора случайных чисел.
*/
$r array_rand ($s3);
print_r ($r);
?>

   
 
 автор: OZ_   (15.10.2005 в 12:55)   письмо автору
 
   для: localGhost   (15.10.2005 в 12:25)
 

А если в массиве будут повторятся значения?

$s = array (1, 3, 5, 6, 4, 5, 3, 8, 1);

   
 
 автор: localGhost   (15.10.2005 в 13:11)   письмо автору
 
   для: OZ_   (15.10.2005 в 12:55)
 

вы про начальный массив?.. и что страшного если будут повтаряться?.. не понял немного сути...

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

   
 
 автор: RV   (15.10.2005 в 13:26)   письмо автору
 
   для: localGhost   (15.10.2005 в 13:11)
 

так. в массиве не будет повторяющихся значений. и я это сделал вот так:

<?
error_reporting
('E_ALL');
if (
$handle opendir('banners'))
{
        while (
false !== ($file readdir($handle)))
        {
            if (
$file != "." && $file != "..")
            {
            
$arr[] = $file;
        }
    }
    
closedir($handle);
}


shuffle($arr); // перемешиваем массив
$first array_shift($arr); // удаляем из массива первый элемент и показываем его
$first explode("." $first);
$first $first[0];  // там имя файла, а мне нуно только имя без расширения
shuffle($arr);

$second array_shift($arr);
$second array_shift($arr);
$second explode("." $second);
$second $second[0];
shuffle($arr);

$third array_shift($arr);
$third array_shift($arr);
$third explode("." $third);
$third $third[0];
?>

вот так. всем спасибо

   
 
 автор: OZ_   (15.10.2005 в 13:27)   письмо автору
 
   для: localGhost   (15.10.2005 в 13:11)
 

Припозднился с кодом, но не зря ж писал. Может кому пригодится :)
Он поуниверсальнее.
<?
$s 
= array (135645381);
$n=array();
$c=count($s);
$vars=3;  //нужно 3 элемента

for ($i=0;$i<$vars;$i++)
{
        
$rnd=array_rand($s);
        if (!
in_array($rnd,$n)) $n[$i]=$rnd;
        else
        {
                
$founded=false;
                for (
$j=0;$j<$c;$j++)
                {
                        if (!
in_array($s[$j]) and $s[$j]!=$rnd)
                        {
                                
$n[$i]=$s[$j];
                                
$founded=true;
                                break;
                        }
                }
                if (!
$founded)
                {
                        print  
"Недостаточно различных элементов массива для выбора ".$vars." случайных.";
                        break;
                }
        }
}
print_r($n);
?>

   
 
 автор: localGhost   (15.10.2005 в 14:19)   письмо автору
 
   для: OZ_   (15.10.2005 в 13:27)
 

Чтоб не повторялось? пожалуйста........
<?
srand 
((float) microtime() * 10000000);
$s = array (135645381);
$r array_rand (array_unique ($s), 3);
print_r ($r);
?>


только в данном случае есть небольшое ограничение: функция array_unique () почему-то отсутствует в версии PHP 4.0.4.

   
Rambler's Top100
вверх

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