Всем привет мне надо сделать древовидную структуру!
function CreateTree($tree)
{
$parrent=[];
foreach($tree as $key=>$item){
$parrent[$item['id_parrent']][$item['id']]=$item;
}
$treeElem=$parrent;
generateElem($treeElem, $parrent);
return $treeElem;
}
function generateElem(&$treeElem, $parrent)
{
foreach($treeElem as $key=>$item){
if(!isset($item['sub-categories'])){
$treeElem[$key]['sub-categories']=[];
}
if(array_key_exists($key,$parrent)){
$treeElem[$key]['sub-categories']=$parrent[$key];
generateElem($treeElem[$key]['sub-categories'], $parrent);
}
}
}
print_r(CreateTree($tree)); // вывод массива которую хочу сделать древовидным!
Функция CreateTree создает древку, в ней есть функция generateElem которая если у элемента есть дети то создаются подкатегории! Я понял что проблема заключается в generateElem($treeElem[$key]['sub-categories'], $parrent); этой строчке где применяется рекурсивный метод! без этой строчки весь код работает но без под категорий. то есть детей!
Но у меня выходит такая ошибка!
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 20480 bytes) in /home/index.php on line 618
Я пробовал изменять память не помогло, я смотрел в интернете и все говорили про изменение памяти! НО так и не нашел способ решения проблемы надеюсь кто нибудь подскажет! Возможно из за бесконечного цикла, я так не считаю! Помогите пожалуйста 3 дня об голову боюсь!
Алгоритм:
Массив всех элементов и идентификатор текущего родителя (изначально 0/nothing/null/weverever).
Просмотрите все элементы.
Если parent_id элемента совпадает с текущим parent_id, полученным в 1., элемент является дочерним от родительского ID.
Поместить в список текущих детей (здесь: $branch).
Вызов функции рекурсивно с идентификатором только что идентифицированного в п 3 элемента, т.е. найти все дочерние элементы этого элемента, и добавить их в качестве дочерних элементов.
Дерево построено.
Функция
function buildTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
$tree = buildTree($rows);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я решил обратиться к вам за помощью, ибо сам не понимаю как с этим боротьсяУ меня есть паблик-бот, который состоит в беседе, имеет полный доступ...