X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> Случайные числа
BebeKa
BebeKa
Topic Starter сообщение 2.2.2010, 22:29; Ответить: BebeKa
Сообщение #1


Участник
***

Группа: User
Сообщений: 108
Регистрация: 20.3.2009
Из: Украина
Поблагодарили: 5 раз
Репутация:   4  


Есть 21 чисел в массиве, нужно из этого массива вывести 15 чисел в хаотичном порядке ( rand() ).

У меня вышло вот что:

<?php
$num = 21;

$r = array();
for ($i = 0; $i <= $num; $i++) {
    $r[] = rand(1,$num);
}

$newArray = array();
for ($i = 0; $i < 15; $i++) {
    $randVal = $r[rand(1, $num)];
        if (!in_array($randVal, $newArray))
            array_push($newArray, $randVal);
        else
    $i--;
}

foreach($newArray as $id=>$val){
    echo($id . '. ' . $val . '<br>');
}
?>


У меня вышло, только оно так нагружает сервер Апач, что у меня ноут виснет. Можно сделать, это как-то по проще ?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kronos
kronos
сообщение 2.2.2010, 22:32; Ответить: kronos
Сообщение #2


Белый веб-мастер
*******


Группа: Active User
Сообщений: 4703
Регистрация: 10.2.2009
Из: Харьков
Поблагодарили: 2629 раз
Репутация:   327  


Используйте mt_rand


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
BebeKa
BebeKa
Topic Starter сообщение 2.2.2010, 22:35; Ответить: BebeKa
Сообщение #3


Участник
***

Группа: User
Сообщений: 108
Регистрация: 20.3.2009
Из: Украина
Поблагодарили: 5 раз
Репутация:   4  


(kronos @ 2.2.2010, 20:32) *
Используйте mt_rand


Можно по подробнее ? и как сделать, чтобы числа были разные ?то есть не совпадали.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
webpavilion
webpavilion
сообщение 2.2.2010, 23:22; Ответить: webpavilion
Сообщение #4


сеошник на пенсии
*******

Группа: Active User
Сообщений: 2726
Регистрация: 28.4.2009
Из: МО
Поблагодарили: 1659 раз
Репутация:   171  


$num = 21;
$max = 15;
$r = array();

for($i=0;$i<=$num;$i++) $r[] = rand(1,$num);
$rand_keys = array_rand ($r, $max);
foreach ($rand_keys as $n => $v) echo $n, '. ', $v, '<br>';


--------------------
Не ведитесь, cамопис это почти всегда плохо!

Делаю сайты на Drupal 7.x
(очень дорого)


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
BebeKa
BebeKa
Topic Starter сообщение 2.2.2010, 23:43; Ответить: BebeKa
Сообщение #5


Участник
***

Группа: User
Сообщений: 108
Регистрация: 20.3.2009
Из: Украина
Поблагодарили: 5 раз
Репутация:   4  


(webpavilion @ 2.2.2010, 21:22) *
$num = 21;
$max = 15;
$r = array();

for($i=0;$i<=$num;$i++) $r[] = rand(1,$num);
$rand_keys = array_rand ($r, $max);
foreach ($rand_keys as $n => $v) echo $n, '. ', $v, '<br>';


а как сделать, чтобы не было нулей ? то есть, числа начинались с единицы
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
webpavilion
webpavilion
сообщение 2.2.2010, 23:59; Ответить: webpavilion
Сообщение #6


сеошник на пенсии
*******

Группа: Active User
Сообщений: 2726
Регистрация: 28.4.2009
Из: МО
Поблагодарили: 1659 раз
Репутация:   171  


(BebeKa @ 2.2.2010, 22:43) *
а как сделать, чтобы не было нулей ? то есть, числа начинались с единицы

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

$num = 21;
$max = 15;

for($i=1;$i!==$num;$i++) $r[$i] = mt_rand(1,$num);
$rand_keys = array_rand ($r, $max);
shuffle($rand_keys); #для большей рандромности
foreach ($rand_keys as $v) echo ++$n, '. ', $v, '<br>';


с mt_rand на треть быстрее работает.

Сообщение отредактировал webpavilion - 3.2.2010, 0:01


--------------------
Не ведитесь, cамопис это почти всегда плохо!

Делаю сайты на Drupal 7.x
(очень дорого)


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
BebeKa
BebeKa
Topic Starter сообщение 3.2.2010, 0:12; Ответить: BebeKa
Сообщение #7


Участник
***

Группа: User
Сообщений: 108
Регистрация: 20.3.2009
Из: Украина
Поблагодарили: 5 раз
Репутация:   4  


(webpavilion @ 2.2.2010, 21:59) *
почитать о php не пробовали? говорят от нулей помогает.

$num = 21;
$max = 15;

for($i=1;$i!==$num;$i++) $r[$i] = mt_rand(1,$num);
$rand_keys = array_rand ($r, $max);
shuffle($rand_keys); #для большей рандромности
foreach ($rand_keys as $v) echo ++$n, '. ', $v, '<br>';


с mt_rand на треть быстрее работает.


Спасибо большое! Да, думал почитать. Вот сегодня и начну.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Dmitry_K
Dmitry_K
сообщение 3.2.2010, 13:00; Ответить: Dmitry_K
Сообщение #8


Участник
***


Группа: User
Сообщений: 159
Регистрация: 4.7.2008
Из: Санкт-Петербург
Поблагодарили: 27 раз
Репутация:   4  


Исппользуйте array_rand


--------------------
Качественная площадка (6/1400, 10 лет, экология) для размещения статей и ссылок.


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
BebeKa
BebeKa
Topic Starter сообщение 3.2.2010, 15:51; Ответить: BebeKa
Сообщение #9


Участник
***

Группа: User
Сообщений: 108
Регистрация: 20.3.2009
Из: Украина
Поблагодарили: 5 раз
Репутация:   4  


(Dmitry_K @ 3.2.2010, 11:00) *
Исппользуйте array_rand

Спасибо) уже помогли мне)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Сделать в сайдбаре блок случайные новости
0 sergsam1 679 4.10.2012, 19:13
автор: sergsam1


 



RSS Текстовая версия Сейчас: 11.12.2017, 9:52
Дизайн