2013-05-19 3 views
0

У меня есть база данных с названиями категорий. Столбцы: ID | CategoryName | ParentID. Я использую row_array() из модели CodeIgniter, и я хочу добавить ключ уровня к этому массиву строк. У меня есть вспомогательная функция, которая рекурсивно вычисляет все уровни категорий. Я написал, что вспомогательные функции в следующем фрагменте кода:Calculating Treversal Tree items level

function treegenerate($arrs, $parent_id=0, $level=0) { 
    foreach($arrs as $arr){ 
     if($arr["CategoryParent"]!=0){ 
      $level+=1; 
     } 
     $arr["Level"] = $level; 
     treegenerate($arrs,$arr["CategoryParent"],$level); 
    } 
    return $arrs; 
} 

Но это дает ошибку: «Разрешены памяти размером 33554432 байт исчерпаны (пытались выделить 523800 байт)». Как я могу исправить эту проблему?

ответ

0

Просто некоторые мысли, не зная код:

  • Можно ли добавить ключи уровня, начиная от ствола? Мог бы спасти вас от повторения.
  • Можете ли вы переместить foreach вне порождения дерева?

Как:

function treegenerate($arr,$level=0) { 
     if($arr["CategoryParent"]!=0){ 
      $level +=1; 
     } 
     else return $level; 

    } 
    treegenerate($arr["CategoryParent"],$level);; 
} 

foreach ($arrs as $arr) $arr['level'] = treegenerate($arr); 
+0

Он не может работать, потому что я возвращал только уровень, как я могу знать CategoryName и идентификатор т.д. важно вне Еогеасп? Я попробовал, но это не сработало. –

+0

Кажется, что вы поперечно целой массив $ arrs на каждом уровне своего дерева несколько раз. Каждый раз, когда вы создаете новый вызов функции treegenerate. Это очень быстро истощает вашу память. – ACNB

+0

Что мне делать? Итак, как вычислить уровни? –