На основе массива составить другой массив

skalim

Новичок
Всем привет! Массив со значениями например 1, 3, 7 ,8,9,10 на основе этого массива нужно сделать массивы
из чисел которые не испоьзованы в этом массиве. Т.е результатом работы должен быть массив со значениями
a=2? второй массив b=4,5,6. Задача вроде бы элементарная, перебираю поочередно вычитаю элементы массива и если разница больше 1 то это границы. теперь код
PHP:
...
foreach($massiv as $mass){

 $a=$mass-$i;
 
  if($a=='1'  )
  {
  continue;
  }
  else{ 
 $range_free=range($i,$mass);
...
 }
$i=$mass;
}
 var_dump($range_free);
проблема в том, что в данном коде var_dump не выводит ничего. Т.е массив range_free не заполняется, насколько я понимаю. но если убрать строку
PHP:
 $range_free=range($i,$mass);
и вместо нее вывести значения mass и i, то они отображаются т.е эти переменные не пустые. Пробовал с помощью for создавать массив, результат тот же. Подскажите, пожалуйста, в чем может быть проблема?
 

skalim

Новичок
проблема в нехватки памяти
[05-Oct-2012 12:16:32 UTC] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 35 bytes) in D:\Site\domains\stroitel\public_html\lib\range.php on line 73
запинается скрипт как раз на строчке $range_free=range($i,$mass);
добавление memory size результата не дает.
 

С.

Продвинутый новичок
Значит идет бесконечный цикл и память полностью забивается.
 

skalim

Новичок
но ведь i и mass определены. почему может получиться бесконечный цикл?
 

eax

#
Я тоже решил %)
PHP:
$arr = array(1, 4, 7, 8, 9, 11, 12, 15);

$i = 0;
$dif = array();
foreach ($arr as $item) {
    if ($i != $item - 1) {
        $dif[] = range($i + 1, $item - 1);
    }
    $i = $item;
}
var_dump($arr);
var_dump($dif);
 

skalim

Новичок
Я тоже решил %)
PHP:
$arr = array(1, 4, 7, 8, 9, 11, 12, 15);

$i = 0;
$dif = array();
foreach ($arr as $item) {
    if ($i != $item - 1) {
        $dif[] = range($i + 1, $item - 1);
    }
    $i = $item;
}
var_dump($arr);
var_dump($dif);
Ну да, только проблема не в том, мой алгоритм тоже рабочий был. Проблема была в следующем: представьте, что $arr не 1, 4, 7, 8, 9, 11, 12, 15, а array(800000001, 814000000, 800000007, 800000008, 800000009, 8000000011, 8000000012, 8000000015); Т.е. range(800000016,813999999); Вот памяти и не хватало)
 
Сверху