2013-06-03 6 views
1

Я работаю с PHP. У меня есть массив, сделал так: (атрибут уровня является уровень ветви в дереве, я хочу сделать)Создание «массива деревьев» из массива в php

Array (
    [0] => stdClass Object 
      (
        [value] => Array 
          (
            [name] => Dog 
            [level] => 1 
          ) 
      ) 
    [1] => stdClass Object 
      (
        [value] => Array 
          (
            [name] => Yorkshire 
            [level] => 2 
          ) 
      ) 

    [2] => stdClass Object 
      (
        [value] => Array 
          (
            [name] => Rottweiler 
            [level] => 2 
          ) 
      ) 

    [3] => stdClass Object 
      (
        [value] => Array 
          (
            [name] => Cat 
            [level] => 1 
          ) 
      ) 
) 

Моя цель состоит в том, чтобы сделать какой-то массив дерева от него, что-то вроде этого :

Array (
    [0] => stdClass Object 
      (
        [value] => Array 
          (
            [name] => Dog 
            [level] => 1 
          ) 
      ) 

      Array (

        [1] => stdClass Object 
          (
            [value] => Array 
              (
                [name] => Yorkshire 
                [level] => 2 
              ) 
          ) 

        [2] => stdClass Object 
          (
            [value] => Array 
              (
                [name] => Rottweiler 
                [level] => 2 
              ) 
          ) 

    ) 

    [3] => stdClass Object 
      (
        [value] => Array 
          (
            [name] => Cat 
            [level] => 1 
          ) 
      ) 
) 

Но я действительно не могу это сделать. У меня даже есть проблемы, чтобы увидеть алгоритм! Любая помощь будет принята с благодарностью.

+0

Вам нужно какой-то идентификатор, чтобы сказать вам, кто является родителя от этого ребенка. Becouse я знаю lvl, но я не знаю, каждый lvl 1 этот lvl 2 принадлежит. – Guerra

+0

Я тоже об этом думал, но дерево уже «приказано». Я имею в виду, что речь идет как: уровень 1 уровень 11 уровень 12 уровень 2 уровень 3 уровень 31 уровня 32 – Franck

+0

понял, если вы можете сохранить этот заказ Визитки вашего решения будет любопытным: (смотрите ответ) – Guerra

ответ

0

мне удалось сделать это таким образом:

$new = array(); 
foreach ($arr as $a){ 
    $new[$a['parentid']][] = $a; 
} 
$tree = createTree($new, $new[0]); // changed 
print_r($tree); 

function createTree(&$list, $parent){ 
    $tree = array(); 
    foreach ($parent as $k=>$l){ 
     if(isset($list[$l['id']])){ 
      $l['children'] = createTree($list, $list[$l['id']]); 
     } 
     $tree[] = $l; 
    } 
    return $tree; 
} 

от АРТУР: create array tree from array list

1
$treelist = array(); 
foreach($list as $key=>$l){ 
    if($l['level'] == 1){ 
     $l['childs'] = array(); 
     $treelist[] = $l; 
    }else{ 
     $treelist[count($treelist-1)]['childs'][] = $l; 
    } 
} 

что-то подобное

Смежные вопросы