Подскажите Уникально-рандомный цикл

Статус
В этой теме нельзя размещать новые ответы.

poikl

Профессор
Регистрация
7 Ноя 2006
Сообщения
164
Реакции
38
Нужно "рандомное" взятия числе из списка.
То есть у меня есть промежуток от 1-1000

for ($k=1;$k<1000;$k++) {
...
}
то получается все по порядку
а надо чтобы работала так
есть промежуток 1-1000
скрипт берет рандомно число из этого промежутка отрабатывает и берет другое рандомное число из этого промежутка , но делает это 1000 раз и числа не повторяюца тоесть в итоге скрипт пройдеца по всему промежутку от 1-1000 и не разу не повторица.


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

Код:
for ($k=1;$k<1000;$k++) 
   {
     ...
     $t= mt_rand(1, 1000); // в t и будет нужное число...
     echo ("$t <br>");
     ...
   }

Как то так .....
 
Давно еще на одном форуме по сео был отличный предложен вариант. Достоин занесения в приемы программирования.

Суть проста - удалите дубликаты, перемешайте и выбирайте по одному. Так будут исключены повторения выборки.

на пхп это делается просто

PHP:
$data=array(); //исходный массив
$mixed=array_unique(data); //уникальный
shuffle($mixed); //перемешанный

$mixed и выбирайте в простом цикле по одному.
 
  • Нравится
Реакции: Alix
Liver, хорошее решение, спасибо.
Только мне кажется, что можно пропустить шаг генерации рандомного массива и удаления уникальных. Ведь в таком случае не будет 100% гарантии, что в исходном массиве $data содержатся все числа в пределах от 1 до 1000. Т.е. если делать это циклом в 1000 шагов, при каждом шаге добавляя в массив уникальное число - велика вероятность добавления одинаковых чисел, которые потом удалятся.
По-моему можно просто запихнуть в исходный массив $data все числа от 1 до 1000, затем перемешать и дергать по одному.
 
Alix

Я не генерирую рэндомный массив. Я чищу и перемешиваю исходный. А откуда он берется и что в нем - личное дело каждого. Конечно, можно не чистить дубликаты. А гарантия 100% наличия всех нужных чисел в массиве выходит за рамки выборки без повторений. Если в исходном массиве они все есть, то никакое удаление дублей их не уничтожит.

Проще сказать я предложил алгоритм, но не решение конкретной задачи.

А применимо к задаче лучше решение будет такое.
PHP:
$list=file('list.txt'); //вот и массив
$keys=array_keys($list); //вот вам и ключи и так лучше. вдруг будет ассоциативный массив на входе

//$mixedKeys=array_unique($keys); //уникальный не нужен
shuffle($keys); //перемешанный  

foreach($keys as $key){
....$list[$key];///вот и выборка
}
В этом примере даже генерировать не нужно от 1 до 1000
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху