2014-02-21 44 views
0

我试图让一个像前一阵列的事情一样的数组父亲的孩子,有些是重复的,有些不是。PHP从以前的阵列构建相关阵列

我有吐出像阵列这样: [0] =>数组 ( [父] =>狗 [child_cat_1] =>一个类别 [child_cat_2] => 2类别 [标题] =>标题 [价格] => 9.49 [SKU] => 3558505550 [old_post_id] => 110 )

[1] => Array 
    (
     [parent] => cats 
     [child_cat_1] => category one 
     [child_cat_2] => category six 
     [title] => Title 
     [price] => 16.49 
     [sku] => 2251752419 
     [old_post_id] => 113 
    ) 

[2] => Array 
    (
     [parent] => cats 
     [child_cat_1] => category three 
     [child_cat_2] => category nine 
     [title] => Title 
     [price] => 59.99 
     [sku] => 7944100467 
     [old_post_id] => 114 
    ) 

[3] => Array 
    (
     [parent] => dogs 
     [child_cat_1] => category one 
     [child_cat_2] => category two 
     [title] => Title 
     [price] => 69.99 
     [sku] => 85932810243 
     [old_post_id] => 117 
    ) 

我有一个硬实时间创建基于关闭这些阵列一个新的数组,并把它变成一个par组ents和儿童。

我试过做什么this post said,但我不能完成它的工作,因为我不完全确定'父'会是什么。

我试过这样做,但我无法弄清楚如何考虑child_cat_2,并删除重复项。我也读过Stackoverflow上的每一个“数组构建层次结构”,但我无法弄清楚这一点。

foreach($new_array as $k => $v){ 
    $array[$v['parent']] = $v['child_cat_1']; 
} 

理想情况下,我想要完成parent下的每个child_cat_2child_cat_1,然后双方正在安排,但随后又删除重复。我认为父母只有11种,但两个孩子每个都有100个。

有人可以指出我在正确的方向得到这些数组。

回答

0

你所描述的是一个3级嵌套数组。您发布的代码肯定无法实现。你的节点有四个属性,而不是你的数组结构,所以这就是你应该在循环中构建的东西。然后根据其他三个属性将它们放入您的结构中。

$results = array(); 
foreach ($data as $datum){ 
    $node = array(
    'title' => $datum['title'] 
    'price' => $datum['price'] 
    'sku' => $datum['sku'] 
    'old_post_id' => $datum['old_post_id'] 
); 

    if (!is_array($results[$datum['parent']])) { 
    $results[$datum['parent']] = array(); 
    } 
    if (!is_array($results[$datum['parent']][$datum['child_cat_1']])) { 
    $results[$datum['parent']] 
     [$datum['child_cat_1']] = array(); 
    } 
    if (!is_array($results[$datum['parent']][$datum['child_cat_1']][$datum['child_cat_2']])) { 
    $results[$datum['parent']] 
     [$datum['child_cat_1']] 
     [$datum['child_cat_2']] = array(); 
    } 

    $results[$datum['parent']] 
    [$datum['child_cat_1']] 
    [$datum['child_cat_2']][] = $node; 
} 
+0

$ data => $ datum?你能解释,因为我不明白如何让我的数据进入这个foreach循环 – David

+0

这是一个错字。这是一个标准的PHP foreach循环。随意纠正这条线;它对问题的核心或我的解决方案没有任何影响。 –