Лучший способ получить N номеров из диапазона между 2 (большими) числами - PullRequest
1 голос
/ 31 октября 2011

Здравствуйте, мне нужно получить N чисел из диапазона между двумя большими числами, без начальных и конечных чисел. Числа (N) должны быть на равных интервалах ... Я попытаюсь объяснить маленькими числами:

<?php
$rangeStart = 0;
$rangeEnd = 100;
$n = 9;

В этом примере мне нужно получить 10,20,30,40,50,60,70,80,90

Я пробовал использовать 'for loop', но это очень медленно, потому что я использую диапазон, например 1207083600 ~ 1275512399

Буду признателен за любую помощь.

=====

Это то, что я называю медленным http://jsfiddle.net/pbF7N/1/ Начало и конец являются временными метками, и мне нужно извлечь 10 дат ...

Ответы [ 3 ]

8 голосов
/ 31 октября 2011

range () с дополнительным 3-м параметром для указания размера шага ...

range(10, 90, 10);

$range = range(10, 90, 10);
print_r($range);
Array
(
    [0] => 10
    [1] => 20
    [2] => 30
    [3] => 40
    [4] => 50
    [5] => 60
    [6] => 70
    [7] => 80
    [8] => 90
)
2 голосов
/ 31 октября 2011

Примерно так:

function nrange($num, $start, $end)
{
        $out = array(); $i = 0;
        $interval = floor(($end - $start) / ($num + 1));
        while ($i++ < $num )
                $out[] = $start + $i * $interval;

        return $out;
}
1 голос
/ 31 октября 2011

Рассмотрим сначала ваш пример.Ваши числа разбили диапазон [0..100) на 10 равных интервалов, [0..10), [10, 20) и т. Д. До [90..100).

Обратите внимание, что количество интервалов равно $n+1.Итак, вы видите, что каждый интервал имеет длину ($rangeEnd - $rangeStart) / $n.

. Используя эту информацию, вы можете использовать диапазон для перехода по $interval числам за раз, то есть

$interval = ($rangeEnd - $rangeStart) / $n;
$range = range($rangeStart, $rangeEnd, $interval);
...