如何从具有父ID的数据库结果数组创建嵌套的多维数组 [英] How to created nested multi dimensional array from database result array with parent id
本文介绍了如何从具有父ID的数据库结果数组创建嵌套的多维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是新手.
我正在学习 ZF2,我需要从数据库值形成嵌套的多维数组.我的数据库表:
I am learning ZF2 where I need to form a nested multi dimensional array from database values. My database table:
+-------------+----------------+---------------------+--------+
| category_id | name | parent_category_ids | status |
+-------------+----------------+---------------------+--------+
| 1 | New Category | 1 | 1 |
| 3 | ddd | 1 | 1 |
| 4 | test1 | 3 | 0 |
| 5 | Test123 recipe | 3 | 1 |
| 6 | abceg | 3 | 1 |
| 7 | xyz | 6 | 1 |
+-------------+----------------+---------------------+--------+
结果数组应该是这样的:
resultant array should be look like this:
Array
(
[1] => Array
(
[id] => 3
[name] => ddd
[sub] =>
Array
(
[0] => Array
(
[id] => 4
[name] => test1
[sub] => None
)
[1] => Array
(
[id] => 5
[name] => Test123 recipe
[sub] => None
)
[2] => Array
(
[id] => 6
[name] => abceg
[sub] =>
Array
(
[0] => Array
(
[id] => 7
[name] => xyz
[sub] => 6
)
)
)
)
)
)
到目前为止我已经尝试过这个代码,但没有积极的结果
I have tried this code so far but no positive result
> foreach ($categoryList as $key => $value) {
> if ($value->getCategoryId()!=1) {
> $category[$key]['id'] = $value->getCategoryId();
> $category[$key]['name'] = $value->getName();
> $category[$key]['sub'] = $this->createSubCategoryArray($value->getCategoryId(), $categoryList);
> }
> }
> public function createSubCategoryArray($parentCatId, $categoryList)
> {
> foreach ($categoryList as $key => $category) {
> if($category->getCategoryId() == $parentCatId && $category->getCategoryId()!=1){
> return array(
> 'id' => $category->getCategoryId(),
> 'name' => $category->getName(),
> 'sub' => $this->createSubCategoryArray($category->getCategoryId(),
> $categoryList)
> );
> }
> }
> }
推荐答案
你可以反转你的结果并收集你的数组
You can reverse your result and collect your array
// ordered by parent
$src = array(
['cid'=>'1','name'=>'Rootcat','parent'=>'1'],
['cid'=>'3','name'=>'dddd','parent'=>'1'],
['cid'=>'4','name'=>'test1','parent'=>'3'],
['cid'=>'5','name'=>'Test123 rec','parent'=>'3'],
['cid'=>'6','name'=>'abceg','parent'=>'3'],
['cid'=>'7','name'=>'JHGSGF','parent'=>'5'],
);
// inverse array, better take it sorted by parent_id desc
$data = array_reverse($src,false);
$for_parent = [];
$result = [];
foreach($data as $rec) {
if (isset($for_parent[$rec['cid']])) {
$rec['sub'] = $for_parent[$rec['cid']];
unset($for_parent[$rec['cid']]);
}
$for_parent[$rec['parent']] []= $rec;
}
print_r($for_parent);
结果示例:
Array
(
[1] => Array
(
[0] => Array
(
[cid] => 1
[name] => Rootcat
[parent] => 1
[sub] => Array
(
[0] => Array
(
[cid] => 3
[name] => dddd
[parent] => 1
[sub] => Array
(
[0] => Array
(
[cid] => 6
[name] => abceg
[parent] => 3
)
[1] => Array
(
[cid] => 5
[name] => Test123 rec
[parent] => 3
[sub] => Array
(
[0] => Array
(
[cid] => 7
[name] => JHGSGF
[parent] => 5
)
)
)
[2] => Array
(
[cid] => 4
[name] => test1
[parent] => 3
)
)
)
)
)
)
)
这篇关于如何从具有父ID的数据库结果数组创建嵌套的多维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文