2016-02-01 44 views
0

创建嵌套的PHP数组我有一个PHP数组如下如何从简单的多维数组

Array 
(
    [1] => Array 
     (
      [id] => 1 
      [name] => Main Category 
      [parent_id] => null 
     ) 

    [2] => Array 
     (
      [id] => 2 
      [name] => sub category 
      [parent_id] => 1 
     ) 

    [3] => Array 
     (
      [id] => 3 
      [name] => child category 
      [parent_id] => 2 
     ) 

    [4] => Array 
     (
      [id] => 4 
      [name] => Main category 1 
      [parent_id] => null 
     ) 

    [5] => Array 
     (
      [id] => 5 
      [name] => sub category 1 
      [parent_id] => 4 
     ) 
    [6] => Array 
     (
      [id] => 6 
      [name] => child category 1 
      [parent_id] => 5 
     ) 

) 

,我想这个阵列下面使用PHP

$categories = array(
    array(
     'id' => 1, 
     'Name' => "Main Category", 
     'sub' => array(
      id => 2, 
      'Name' => 'Sub Category', 
      'sub' => array(
       'id' => 3, 
       'Name' => 'Child category', 
       'sub' => 'None', 
      ) 
     ) 
    ), 
    array(
     'id' => 4, 
     'Name' => "Main Category 1", 
     'sub' => array(
      id => 5, 
      'Name' => 'Sub Category 1', 
      'sub' => array(
       'id' => 6, 
       'Name' => 'Child category 1', 
       'sub' => 'None', 
      ) 
     ) 
    ) 
); 

其实我有一个被转换为3级清单层次结构,看起来像这样

A 1 level 
B 2 level under A 
C 2 level under A 
    D level 3 under C 

E 1 level 
F 1 level 
    G 2 level under F 

如果提供的信息不够丰富请在评论中问我任何问题。所以我给出的例子最终输出看起来如下

主要类别 子类别 孩子

主要类别1 子类2 子类3

这里是我试过了。

foreach ($categoryList as $key => $value) { 
      if ($value->getCategoryId()!=1) { 
       $category[$key]['id'] = $value->getCategoryId(); 
       $category[$key]['name'] = $value->getName(); 
//    $category[$key]['parent_id'] = $value->getParentCategoryIds(); 
       $category[$key]['sub'] = $this->createSubCategoryArray($value->getCategoryId(), $categoryList); 
      } 
     } 


public function createSubCategoryArray($parentCatId, $categoryList) 
     { 
      foreach ($categoryList as $key => $category) { 
       if($category->getCategoryId() == $parentCatId && $category->getCategoryId()!=1){ 
        echo "string"; 
        return array(
         'id' => $category->getCategoryId(), 
         'name' => $category->getName(), 
         'sub' => $this->createSubCategoryArray($category->getCategoryId(), $categoryList) 
        ); 
       } 
      } 
     } 
+1

到目前为止,你已经尝试过什么。发布你的尝试? –

+0

我试过,如果我发送那些正在寻找答案的人,他们可能会混淆,所以没有发布,但如果你需要看看它,但这并不意味着你应该投票我的问题。我的问题有足够的信息来理解它,甚至我也举了一些例子。 –

回答

2

你可以尝试这样的事情,并可以修改它按照您的要求

for($i=0;$i<count($arr);$i++){ 

    if($arr[$i]['parent_id'] == null){ 
     $data[] = array(
      'id' => $arr[$i]['id'], 
      'Name' => $arr[$i]['name'], 
      'sub' => array() 
     ); 
    }elseif($arr[$i]['parent_id'] != null){ 
     for($j=0;$j<count($data);$j++){ 
      if($data[$j]['id'] == $arr[$i]['parent_id']){ 
       $data[$j]['sub'][] = createChild($arr[$i]); 
      }else{ 
       for($k=0;$k<count($data[$j]['sub']);$k++){ 
        if($data[$j]['sub'][$k]['id'] == $arr[$i]['parent_id']){ 
         $data[$j]['sub'][$k]['sub'] = createChild($arr[$i]);  
        } 
       } 
      } 
     } 
    } 
} 

function createChild($obj){ 
    return array(
     'id' => $obj['id'], 
     'name' => $obj['name'], 
     'parent_id' => $obj['parent_id'], 
     'sub' => array() 
    ); 
} 
+0

Bravo !!很棒@哈里达山谢谢 –

+0

好的答案Bro – Charlie

+0

...竖起大拇指+1 –