Будьте внимательны при написании цикла for()
.Если вам нужно 30 записей, вам не следует использовать <=
, иначе вы получите 31, потому что $i
начинается с 0.
Создайте массив случайных чисел, затем отсортируйте их.
Затем определите, есть ли у вас центральная запись (нечетная длина массива) или вам нужно усреднить две средние записи (четная длина массива).
Код: ( Demo )
$limit = 30; // how many random numbers do you want? 30 or 31?
for ($i = 0; $i < $limit; ++$i) {
$numbers[] = rand(0, 100);
}
var_export($numbers);
//echo "\n---\nAverage: " , array_sum($numbers) / $limit;
echo "\n---\n";
sort($numbers);
$count = sizeof($numbers); // cache the count
$index = floor($count/2); // cache the index
if (!$count) {
echo "no values";
} elseif ($count & 1) { // count is odd
echo $numbers[$index];
} else { // count is even
echo ($numbers[$index-1] + $numbers[$index]) / 2;
}
Возможный вывод:
array (
0 => 27,
1 => 24,
2 => 84,
3 => 43,
4 => 8,
5 => 51,
6 => 60,
7 => 86,
8 => 9,
9 => 48,
10 => 67,
11 => 20,
12 => 44,
13 => 85,
14 => 6,
15 => 63,
16 => 41,
17 => 32,
18 => 64,
19 => 73,
20 => 43,
21 => 24,
22 => 15,
23 => 19,
24 => 9,
25 => 93,
26 => 88,
27 => 77,
28 => 11,
29 => 54,
)
---
43.5
После сортировки элементы [14]
и [15]
удерживают 43
и 44
соответственно.Среднее значение этих «средних двух» - это то, как определяется результат.( демонстрация жестко закодированных чисел )
Если вы хотите короткий, негибкий, жестко закодированный фрагмент, то вы можете использовать 30
и 14
и 15
в качестве заданного размераи индексы.
for ($i = 0; $i < 30; ++$i) {
$numbers[] = rand(0, 100);
}
sort($numbers);
echo ($numbers[14] + $numbers[15]) / 2;