Php 嵌套数组中的多维数组
我有一个脚本,它遍历一个CSV文件,并将每一行作为一个数组放入另一个数组(嵌套数组?)。每行有2-3个字段用于该行中项目的类别。我正在尝试如何从这些类别中创建多维数组。以下是我目前掌握的资料来源:Php 嵌套数组中的多维数组,php,multidimensional-array,Php,Multidimensional Array,我有一个脚本,它遍历一个CSV文件,并将每一行作为一个数组放入另一个数组(嵌套数组?)。每行有2-3个字段用于该行中项目的类别。我正在尝试如何从这些类别中创建多维数组。以下是我目前掌握的资料来源: $csv = new File_CSV_DataSource; if ($csv->load($file)) { $items = $csv->getHeaders(); $csv->getColumn($items[2]); if ($csv->isS
$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
);
$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
)
)
)
),
);
最后两个数组中每个数组的数值都是前一个数组中其父类别的索引。我想做的是将它们合并成一个大数组,格式如下:
$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
);
$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
)
)
)
),
);
我知道必须有一种更有效的方法来做这件事,但我想不出来
编辑-我还应该提到,并非所有行都有第三类字段值。我更喜欢按名称对它们进行索引:
$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;
}
你确定你需要潜艇吗?它可以引起亚亚亚群。。。将他们设置为孩子。将在一瞬间回答。只有三层分类的可能性。在某些情况下,子类别是绝对必需的。在某些行中不是。