[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: уникальные числа в массиве
webman
нужно сделать массив с уникальными четырьмя числами, посредством функции rand()

пробовал вот так:
for($i=0;$i<5;$i++) {
$uvyv[$i] = rand(0,17);
if(in_array($uvyv[$i],$uvyv)) {
do {
$uvyv[$i] = rand(0,17); }
while(in_array($uvyv[$i],$uvyv)); }
}

но ничего не получилось. прошу вашей помощи)



Спустя 5 минут, 55 секунд (20.03.2011 - 10:15) neadekvat написал(а):
Ну-с, наверное, не самое оптимальное, но решение:
$arr = null;
while(count($arr) != 4)
{
$arr[] = rand(0, 17);
$arr = array_unique($arr);
}

Спустя 6 минут, 9 секунд (20.03.2011 - 10:21) webman написал(а):
но тогда вырезается повторившееся число, и в итоге получается 3 из 4.

Спустя 4 минуты, 47 секунд (20.03.2011 - 10:26) neadekvat написал(а):
Вы запускали скрипт? print_r($arr) сделайте - сколько там элементов видите?

А дабы вы быстрее поняли, когда массив заполняется 4-м элементом, цикл все равно начинается еще раз, сверяет условие, не проходит его и цикл заканчивает свою работу. Так что если 4-й элемент удаляется - то цикл пройдет как минимум еще раз.

Спустя 8 минут, 23 секунды (20.03.2011 - 10:35) webman написал(а):
запускал
Array ( [0] => 13 [1] => 11 [3] => 5 [4] => 6 )
после [1] сразу идет [3]

Array ( [0] => 15 [1] => 7 [2] => 12 [4] => 2 )
после [2] сразу идет [4]

как это исправить?

Спустя 6 минут, 8 секунд (20.03.2011 - 10:41) neadekvat написал(а):
Обож, чем вас это не устраивает?

Спустя 4 минуты, 24 секунды (20.03.2011 - 10:45) kirik написал(а):
Цитата (webman @ 20.03.2011 - 02:35)
как это исправить?

Например так:
$array = array();
while(!isset($array[3])) {
$n = rand();
if(!in_array($n, $array)) {
$array[] = $n;
}
}


или пропустить через array_values();

Спустя 1 минута, 14 секунд (20.03.2011 - 10:46) neadekvat написал(а):
kirik, сложно, хрен разберешься.
$out = array_combine(array(0, 1, 2, 3), $arr);

Спустя 1 минута, 54 секунды (20.03.2011 - 10:48) webman написал(а):
в общем есть в массиве $fr есть много id, далее нужно выбрать рандомно 4 из них, дать запрос в бд и вывести таблицы с этими id. получается запрос в бд ...WHERE id='$arr[0]' ...WHERE id='$arr[1]' и т.д.
а на этом примере Array ( [0] => 15 [1] => 7 [2] => 12 [4] => 2 )
$arr[3] нету в итоге выведется только 3 таблицы

Спустя 1 минута, 1 секунда (20.03.2011 - 10:49) kirik написал(а):
Цитата (neadekvat @ 20.03.2011 - 02:46)
сложно, хрен разберешься.

А условия задачи читал?

Спустя 51 секунда (20.03.2011 - 10:50) neadekvat написал(а):
Цитата (kirik @ 20.03.2011 - 10:49)
А условия задачи читал?

О чем речь?

Спустя 1 минута, 52 секунды (20.03.2011 - 10:52) webman написал(а):
Цитата (neadekvat @ 20.03.2011 - 07:46)
kirik, сложно, хрен разберешься.
$out = array_combine(array(0, 1, 2, 3), $arr);

помогло. большое спасибо)

Спустя 2 минуты, 7 секунд (20.03.2011 - 10:54) kirik написал(а):
Цитата (webman @ 20.03.2011 - 02:48)
в общем есть в массиве $fr есть много id, далее нужно выбрать рандомно 4 из них, дать запрос в бд и вывести таблицы с этими id

$fr = range(1, 100);

$rnd_keys = array_rand($fr, 4);
$array = array();
foreach($rnd_keys as $key) {
$array[] = $fr[$key];
}
print_r($array);

Спустя 1 минута, 10 секунд (20.03.2011 - 10:55) kirik написал(а):
Цитата (neadekvat @ 20.03.2011 - 02:50)
О чем речь?

Сорри.. ты о ключах? Можно ещё проще, я выше написал..
$arr = array_values($arr);

Спустя 1 минута, 43 секунды (20.03.2011 - 10:57) neadekvat написал(а):
Цитата (kirik @ 20.03.2011 - 10:55)
Сорри.. ты о ключах? Можно ещё проще, я выше написал..

О них.
Согласен, забыл про эту функцию (когда писал твоего поста еще не видел).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.