【问题标题】:PHP build associated array from previous arrayPHP从前一个数组构建关联数组
【发布时间】:2014-02-22 00:33:15
【问题描述】:

我正在尝试从以前的数组中创建一个类似于父子数组的数组,有些是重复的,有些不是。

我有一个像这样吐出的数组: [0] => 数组 ( [父母] => 狗 [child_cat_1] => 第一类 [child_cat_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
    )

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

我尝试做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种。

谁能指出我正确的方向来整理这些数组。

【问题讨论】:

    标签: php arrays sorting multidimensional-array


    【解决方案1】:

    您所描述的是一个 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;
    }
    

    【讨论】:

    • $data => $datum?您能否解释一下,因为我不明白如何将我的数据放入这个 foreach 循环中
    • 那是一个错字。它本来是一个标准的 php foreach 循环。随意更正该行;它与问题的核心或我的解决方案无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2011-02-10
    • 2012-10-22
    • 1970-01-01
    • 2012-12-20
    • 2021-07-07
    • 1970-01-01
    相关资源
    最近更新 更多