Случайный выбор из чисел

voland

Guest
Случайный выбор из чисел

Понадобилось сделать случайный выбор из ряда чисел, причем ряд идет не по порядку, а с разрывами...
1 4 7 10 345 2356 и т.д.

Пробовал rand(), но тогда есть вероятность, что полученное число будет отсутствовать!
А как выбрать из такого масива случайное число из сещуствующих в нем?
 

Georgy

Guest
[m]array_rand[/m]( ) - это тебе поможет. или:

PHP:
srand(  );
$a = array( 1, 7, 16, 3, 98, 22, 6 );
$n = rand( 0, sizeof( $a ) );
print $a[$n];
P.S.

смотри в сл. раз сначала мануал, а потом вопросы:

http://ru.php.net/manual/ru/
 

voland

Guest
Сделал, вот только есть одно но, у меня иногда очень редко проскакивает пустота! То есть на вывод ничего не идет, хотя в массиве пустот нет! В чем может быть проблема?
 

gudzon

Guest
Если ты делаешь
PHP:
$a = array( 1, 7, 16, 3, 98, 22, 6 ); 
$n = rand( 0, sizeof( $a ) ); 
print $a[$n];
так то sizeof($a) возврашает 7 и тебе надо либо делать нумерацию массива с 1 либо sizeof($a)-1
 

BoFFiN

Новичок
В функциях rand и srand качество случайных чисел никуда не годиться.
Лучше использовать mt_rand($min,$max);
 

voland

Guest
Понятно, сделал array_rand и все стало нормально работать... Большое всем спасибо!
 

voland

Guest
Возник ещё вопрос, я попробовал выбрать два номера, вместо одного написал
PHP:
$randnomer = array_rand($nomer, 2);
а мне выдает ошибку Illegal offset type
Но почему? Ведь в примере тоже указано на выбор два числа!
 

Georgy

Guest
PHP:
srand ((float) microtime() * 10000000);
$ary = array ( 1, 56, 32, 236, 49, 84, 9, 43, 0, 11, 635, 121, 2 );

$keys = array_rand ( $ary, 2 );
print '<PRE>[' . $ary[$keys[0]] . '][' . $ary[$keys[1]] . ']</PRE>';
 

gudzon

Guest
Значит ты где-то еще ошибся - я попробавл код с пхп.нет :
PHP:
srand ((float) microtime() * 10000000);
$input = array ("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand ($input, 2);
print $input[$rand_keys[0]]."\n";
print $input[$rand_keys[1]]."\n";
все отлично работает...
 

voland

Guest
Я делал вот так! Запрос к БД возвращает числовой массив, все числа целые.
PHP:
$query = mysql_query($sql) or die(mysql_error());
$i=0;
while ($row = mysql_fetch_row($query))
{
  $nomer[$i] = $row[0];
  $i++;
}
$randnomer[0] = array_rand($nomer, 1);
echo $nomer[$randnomer[0]];
Так вот с 1 работает а с 2 уже выдает ошибку!
 

Georgy

Guest
2 voland:

$randnomer[0] = array_rand($nomer, 1);

блин вот:
$randnomer = array_rand($nomer, 2);
echo $nomer[$randnomer[0]];
echo $nomer[$randnomer[1]];
 

Georgy

Guest
а вообще такую кварю не судьба написать?

[sql]
select * from t1 where RAND() limit 2
[/sql]
 
Сверху