В PHP есть замечательная и простая как двери функция для генерации числовых последовательностей:

range(1, 100); // генерирует массив из 100 последовательных элементов

Все в ней замечательно, кроме одного. Проиллюстрирую примером:

echo 'm1: '.memory_get_usage()."\n";
$range = range(1, 100000);
echo 'm2: '.memory_get_usage()."\n";
$s = 0;

foreach($range as $i) {
    $s += $i;
}

echo ' summ:'.$s."\n";
echo 'm3: '.memory_get_usage()."\n";

А вот вывод это примера:

m1: 231008
m2: 14880032
summ:5000050000
m3: 14880256

Ощущаете? 14Мб памяти на массив из 100тыс элементов на ровном месте, не вдаваясь в анализ "размер одного элемента массива PHP", который расписан в нете неоднократно, набросал "памяте-эффективный" аналог range.

$range = function($min, $max, $step = 1) {
    for($i=$min; $i<=$max; $i+=$step) {
        yield $i;    
    }
};

echo 'm1: '.memory_get_usage()."\n";
$range = $range(1, 100000);
echo 'm2: '.memory_get_usage()."\n";
$s = 0;
foreach($range as $i) {
    $s += $i;
}

echo ' summ:'.$s."\n";
echo 'm3: '.memory_get_usage()."\n";

А вот вывод, значительно веселее:

m1: 232568
m2: 233296
summ:5000050000
m3: 232696

В целом, пост не про range. В новых версиях PHP появилась долгожданная поддержка генераторов, не забывайте использовать.