来自csv列值的类别

时间:2012-11-29 04:36:27

标签: php recursion multidimensional-array tree

我有一个包含item_id | item_name | item_cat1 | item_cat2 | item_cat3列的项目的CSV文件。我正在将此文件解析为一个包含每个项目信息的数组的大型数组:

$items = Array(
  1 => Array(
    item_id => item1,
    item_name => item1,
    item_cat1 => cat1,
    item_cat2 => cat2,
    item_cat3 => cat3
  ),
  2 => Array(
    item_id => item2,
    item_name => item2,
    item_cat1 => cat4,
    item_cat2 => cat5,
    item_cat3 => cat6
  ),
  3 => Array(
    item_id => item3,
    item_name => item3,
    item_cat1 => cat1,
    item_cat2 => cat7,
    item_cat3 => ''
  )
)

我想要做的是创建一个嵌套在以下类别的新数组:

$cats = Array(
  1 => Array(
    'cat_name' => cat1,
    'subs' => Array(
      1 => cat2,
      2 => cat7
    )
  )
)

但不知何故,它需要递归,如果第三级包含一个条目,也可以获得第三级数组。

如何实现这一目标?

编辑 - 这是我到目前为止所拥有的,以及我想要完成的简短代码:

$mainCats = array();

foreach($items as $item){
    if(!in_array($item[10], $mainCats)){
        $mainCats[] = array(
            'cat_name' = > $item[10],
            'cat_subs' => array()
    }
    // if $item[11] does not exist in cat_subs where $mainCats['cat_name'] == $item[10], add it.
    // else check if $item[12] exists in cat_subs where $mainCats['cat_subs']['cat_name'] == $item[11]
}

现有代码的问题在于,由于$item[10]位于$mainCats数组中的数组中,因此它会添加每个出现,而不是仅添加一个。

0 个答案:

没有答案