のような列を持つ項目の 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 つだけではなくすべての出現を追加することです。