0

のような列を持つ項目の CSV ファイルがありますitem_id | item_name | item_cat1 | item_cat2 | item_cat3。このファイルを解析して、各項目の情報の配列を含む 1 つの大きな配列にします。

$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
    )
  )
)

しかし、3 番目のレベルにエントリが含まれている場合は、3 番目のレベルの配列も取得して再帰的である必要があります。

これはどのように達成できますか?

編集-これまでのところ、私が達成したいことの短いコードは次のとおりです。

$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配列にあるため、1 つだけではなくすべての出現を追加することです。

4

0 に答える 0