PHP从以前的数组构建关联数组

时间:2014-02-21 02:15:48

标签: php arrays sorting multidimensional-array

我正在尝试使用以前的数组中的数组创建父类,有些是重复的,有些则不是。

我有一个像这样吐出的数组:     [0] =>排列         (             [parent] =>小狗             [child_cat_1] =>第一类             [child_cat_2] =>第二类             [title] =>标题             [price] => 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
    )

我很难根据这些数组创建一个新数组,并将其转换为父母和子女的数组。

我尝试做this post said,但我无法让它工作,因为我不完全确定'父母'会是什么。

我尝试过这样做,但我无法弄清楚如何考虑child_cat_2,并删除重复项。我还在Stackoverflow上阅读了几乎所有“构建层次结构的数组”,但我只是想不出这个。

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

理想情况下,我要完成的是将每个child_cat_2安排在child_cat_1下,然后安排在parent下,但同时删除重复内容。我认为父母只有11种类型,但这两个孩子各有多达100种。

有人能指出我正确的方向来解决这些数组。

1 个答案:

答案 0 :(得分: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;
}