2016-03-30 64 views
0

虽然看起来很简单,但我一直在为这种情况挣扎几天,而我一直无法找到解决方案。我解释一下以下行:PHP - 递归添加子类

我有什么

我有两个数组:一个与类别的顺序和另一个与类别的值。东西如下:

$orders = 
    [ 
     { 
      category: 3 
     }, 
     { 
      category: 8 
     } 
    ]; 

$values = 
    { 
     3: [ 
      { 
       id: 1, 
       value: 'Value 1' 
      }, 
      { 
       id: 2, 
       value: 'Value 2' 
      }, 
      { 
       id: 3, 
       value: 'Value 3' 
      } 
     ], 
     8: [ 
      { 
       id: 6, 
       value: 'Value 6' 
      }, 
      { 
       id: 7, 
       value: 'Value 7' 
      } 
     ] 
    }; 

正如你所看到的,有2 但他们可以更(事实上,其中最多10)。

编辑

result和其他变量之间的关系是,你可以看到,3类有值与id 1,2和3。因此,随着第3类是在第一数组,我需要得到类别3中的每个类别。

因此,作为解释示例,类别3.1(以及3.2和3.3)应该有内部子类别8.6和8.7。

我需要什么

我需要让他们子类别的前一个的每一个,考虑到订单。因此,由于订单是第一类别3,然后是类别8,所以类别3的每个值必须包含在类别8的所有值内(等等,如果添加了更多类别,则下一类别的每个值将在8号类别下)。

所以我需要的是以下结果:

$result = 
    [ 
     { 
      category: {id: 1}, // Category 3 first value 
      subcategories: [ 
       { 
        category: {id: 6} // Category 8 first value 
       }, 
       { 
        category: {id: 7} // Category 8 second value 
       } 
      ] 
     }, 
     { 
      category: {id: 2}, // Category 3 second value 
      subcategories: [ 
       { 
        category: {id: 6} // Category 8 first value 
       }, 
       { 
        category: {id: 7} // Category 8 second value 
       } 
      ] 
     }, 
     { 
      category: {id: 3}, // Category 3 third value 
      subcategories: [ 
       { 
        category: {id: 6} // Category 8 first value 
       }, 
       { 
        category: {id: 7} // Category 8 second value 
       } 
      ] 
     } 
    ] 

我已经试过

我不会写,我已经试过了所有的办法,但我似乎无法到为此找到合适的解决方案。

我试过递归函数(我认为这是实现这个的正确方法),但我可以带来的是一个'堆栈调用超过'像错误。

Aclarations

数据来源已公开,因此很适合变更。但是,我想这样保持下去,因为这种结构对未来有影响 - 尽管如果有必要,它们也可以改变。

+0

我不是很了解“我需要什么”部分下的'$ result'对象。 '$ orders'如何转换为'$ result'?那里我甚至没有看到类别8。 – Mike

+0

我已经编辑了这个问题(在我所拥有的下),所以它更清晰。感谢您的时间,并感到抱歉让它变得如此混乱。 – Unapedra

回答

0

我想我明白了!

这里是我使用的,至少就目前而言,作品的代码(我可以添加许多orders,因为我想):

$result = array(); 
$objtoadd = array(); 

for($i = sizeof($orders)-1; $i >= 0; $i--){ 

    $objtoadd[$i] = array(); 
    $objtoadd[$i]['subcategories'] = array(); 

    $act_gr = $orders[$i]; 
    $obj; 

    foreach($values[$act_gr->category] as $sub){ 

     $obj = array(); 
     $obj['category'] = $sub; 

     if(isset($objtoadd[$i+1]) && sizeof($objtoadd[$i+1]['subcategories']) > 0) $obj['subcategories'] = $objtoadd[$i+1]['subcategories']; 

     $objtoadd[$i]['subcategories'][] = $obj; 

    } 

    if($i === 0 && isset($objtoadd[$i]) && isset($objtoadd[$i]['subcategories'])) $result = $objtoadd[$i]['subcategories']; 

} 

echo json_encode($result); 

谢谢大家对你的时间和答案,以及为您的耐心!