2012-12-10 33 views
0

我有一個腳本通過一個CSV文件,並將每行作爲一個數組放入另一個數組(嵌套數組?)。每行有2-3個字段用於該行中該項目的類別。我試圖通過如何創建這些類別中的多維數組。這是我目前有來源:來自嵌套數組的多維數組

$csv = new File_CSV_DataSource; 
if ($csv->load($file)) { 
    $items = $csv->getHeaders(); 
    $csv->getColumn($items[2]); 
    if ($csv->isSymmetric()) { 
     $items = $csv->connect(); 
    } else { 
     $items = $csv->getAsymmetricRows(); 
    } 
    $items = $csv->getrawArray(); 
} 

$mainCats = array(); 
$subCats = array(); 
$subSubs = array(); 

foreach($items as $item){ 
    if(!in_array($item[10], $mainCats)){ 
     $mainCats[] = $item[10]; 
    } 
} 

foreach($items as $item){ 
    if(!array_key_exists($item[11], $subCats)){ 
     $parent = array_search($item[10], $mainCats); 
     $subCats[$item[11]] = $parent; 
    } 
} 

foreach($items as $item){ 
    if(!array_key_exists($item[12], $subSubs)){ 
     $parent = array_search($item[11], array_keys($subCats)); 
     $subSubs[$item[12]] = $parent; 
    } 
} 

這裏做的事情到目前爲止創建3個陣列,格式:

$mainCats = Array(
    [0] => Main Cat 1, 
    [1] => Main Cat 2, 
    [2] => Main Cat 3 
); 

$subCats = Array(
    [Sub Cat 1] => 0, 
    [Sub Cat 2] => 1, 
    [Sub Cat 3] => 2 
); 

$subSubs = Array(
    [Sub Sub 1] => 0, 
    [Sub Sub 2] => 1, 
    [Sub Sub 3] => 2 
); 

每最後2個陣列的數值是指數他們的父類別在前面的數組中。我想要做的就是將它們全部合併成一個大的數組中的格式:

$cats = Array(
    [0] => Array(
     'name' => Main Cat 1, 
     'subs' => Array(
      [0] => Array(
       'name' => Sub Cat 1, 
       'subs' => Array(
        'name' => Sub Sub 1 
       ) 
      ) 
     ) 
    ), 
    [1] => Array(
     'name' => Main Cat 2, 
     'subs' => Array(
      [0] => Array(
       'name' => Sub Cat 2, 
       'subs' => Array(
        'name' => Sub Sub 2 
       ) 
      ) 
     ) 
    ), 
    [2] => Array(
     'name' => Main Cat 3, 
     'subs' => Array(
      [0] => Array(
       'name' => Sub Cat 3, 
       'subs' => Array(
        'name' => Sub Sub 3 
       ) 
      ) 
     ) 
    ), 
); 

我知道必須有這樣做的更有效的方式,但我無法弄清楚。

編輯 - 我還應該提到並非所有的行都有第3類字段值。

+0

是你確定你需要SubSub?它可能會導致SubSubSub ...將它們設置爲孩子。將在短時間內回答 –

+0

只有3層的可能性。在某些情況下,子子類是絕對必需的。在一些行中它不是。 – chaoskreator

回答

0

我喜歡它們編制索引的名字:

$cats=array(); 
//-------- 
foreach($items as $item){ 
     $main=$item[10]; 
     $subCat=$item[11]; 
     $subSub[$item[12]]; 
     $cats[$main]['subs'][$subCat]['subsubs'][$subSub]['name']=$subSub; 
     $cats[$main]['subs'][$subCat]['name']=$subCat; 
     $cats[$main]['name']=$main; 



}