Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как создать одномерный массив из N элементов и заполнить его сулчайными числами?
Форумы портала PHP.SU » » Вопросы новичков » Как создать одномерный массив из N элементов и заполнить его сулчайными числами?

Страниц (1): [1]
 

1. beginner_0001 - 28 Сентября, 2012 - 07:59:29 - перейти к сообщению
Изучаю PHP. В теме топика собственно вопрос.
Спасибо большое за ответ, заранее!
2. avtor.fox - 28 Сентября, 2012 - 08:09:18 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. function array_fill_rand($n){
  2.         $arr = array();
  3.         for($i=0;$i<$n;$i++){
  4.                 $arr[] = rand(0, $n*2);
  5.         }
  6.         return $arr;
  7. }
  8. $arrFillRand = array_fill_rand(10);
  9. print_r($arrFillRand);

Как вариант. Может быть и есть стандартная функция, но я её не знаю. И поиск ничего не дал.
3. beginner_0001 - 28 Сентября, 2012 - 08:16:54 - перейти к сообщению
Спасибо!
4. EuGen - 28 Сентября, 2012 - 09:44:22 - перейти к сообщению
Используйте sort. Пример:
PHP:
скопировать код в буфер обмена
  1. function createRandom($iCount, $iMin=0, $iMax=RAND_MAX, $bSort=false)
  2. {
  3.    $rgData=array_map(function($x) use ($iMin, $iMax)
  4.    {
  5.       return mt_rand($iMin, $iMax);
  6.    },array_fill(0, $iCount, 0));
  7.    if($bSort)
  8.    {
  9.       sort($rgData);
  10.    }
  11.    return $rgData;
  12. }
  13. //$rgData=createRandom(10,100,200, true);
5. beginner_0001 - 28 Сентября, 2012 - 10:17:37 - перейти к сообщению
Продолжение. Товарищи подскажите плиз как лучше сделать?

Создал массив из 30 элементов с рандомными числами.
Отсортировал массив по возрастанию.
Как в отсортированный массив вставить случайное число, чтобы он оставался отсортированным?

<?php

//Создание массива из 30 эл с рандомными числами

function array_fill_rand($limit, $min=false, $max=false)
{
$limit = (int)$limit;
$array = array();

if ($min !== false && $max !== false)
{
$min = (int)$min;
$max = (int)$max;
for ($i=0; $i<$limit; $i++)
{
$array[$i] = rand($min, $max);
}
}

return $array;
}

$rand_array = array_fill_rand(30, 0, 300);

//Сортировка по возрастанию

sort($rand_array);
for($i=0; $i < count($rand_array); $i++)
{

echo '<pre>';
print_r($rand_array);
//echo '<pre>';

exit;

}

Спасибо! Если поможете буду ОЧЕНЬ благодарен!
В PHP не очень. Только учусь.
6. AlexAnder - 28 Сентября, 2012 - 12:22:27 - перейти к сообщению
Цитата:
Как в отсортированный массив вставить случайное число, чтобы он оставался отсортированным?

добавь, и снова отсортируй А?!
7. armancho7777777 - 28 Сентября, 2012 - 12:46:00 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. // Просто создаём массив и диапазона чисел
  2. range(0, 50);
  3.  
  4. // + Перемешиваем
  5. shuffle(range(0, 50));
  6.  
  7. // + сбрасываем ключи
8. Мелкий - 28 Сентября, 2012 - 13:12:56 - перейти к сообщению
armancho7777777, shuffle изменяет аргумент по ссылке.
9. EuGen - 28 Сентября, 2012 - 13:13:31 - перейти к сообщению
armancho7777777 пишет:
shuffle(range(0, 50));

Угадайте, что будет на выходе.
AlexAnder пишет:
добавь, и снова отсортируй

Лучше все же добавлять случайное число, сдвигая диапазон минимального значения, устанавливая его в текущее максимальное значение массива. С учетом отсортированности - это будет последний элемент, так что алгоритм еще более упрощается.
10. armancho7777777 - 28 Сентября, 2012 - 13:14:34 - перейти к сообщению
EuGen пишет:
Угадайте, что будет на выходе.

Блин, точнее так)
PHP:
скопировать код в буфер обмена
  1. // Cоздаём массив из диапазона чисел
  2. $r = range(0, 50);
  3.  
  4. // + Перемешиваем и сбрасываем ключи
  5. shuffle($r);
  6.  
  7. print_r($r);
  8.  
11. EuGen - 28 Сентября, 2012 - 13:22:35 - перейти к сообщению
armancho7777777 пишет:
// Cоздаём массив из диапазона чисел
$r = range(0, 50);

// + Перемешиваем
shuffle($r);

// + сбрасываем ключи
$r = array_values($r);

Это все же создаст перемешанный массив, состоящий из значений от 0 до 50, а не массив из 50 случайных значений. Поэтому не подходит. Более того, требуется еще и отсортированность этих значений. Поэтому, сортируя, Вы получите исходный range(0,50).
12. armancho7777777 - 28 Сентября, 2012 - 13:24:18 - перейти к сообщению
EuGen пишет:
а не массив из 50 случайных значений

Я знаю.
Просто, как вариант )
13. vaajnur - 06 Октября, 2013 - 19:17:41 - перейти к сообщению
можно без функций, покороче

<?
echo "<pre>";
$n = 15;// любое число
for($u=0;$u<$n;$u++){
$t[$u] = rand(500,1000);
};
print_r($t);
echo "</pre>";
?>

 

Powered by ExBB FM 1.0 RC1