我正在做像
这样的展示树结构Level1 level2 level3 ..... level n
1
+------1_1
| +------1_1_1
+------1_2
2
我的数据
$ data =
Array
(
[0] => Array
(
[IDCategory] => 1
[IDCategoryParent] => 4
[Name] => Thị trường trong nước
[Slug] => thi-truong-trong-nuoc
[OrderCategory] => 1
[Description] => Tin tức Thị trường trong nước
[Status] => 1
)
[1] => Array
(
[IDCategory] => 3
[IDCategoryParent] => 3
[Name] => Thị trường quốc tế
[Slug] => thi-truong-quoc-te
[OrderCategory] => 2
[Description] => Tin tức Thị trường quốc tế
[Status] => 1
)
[2] => Array
(
[IDCategory] => 4
[IDCategoryParent] => 4
[Name] => Tin tức công ty
[Slug] => tin-tuc-cong-ty
[OrderCategory] => 3
[Description] => Tin tức công ty Tràng An
[Status] => 1
)
[3] => Array
(
[IDCategory] => 5
[IDCategoryParent] => 1
[Name] => Thực phẩm
[Slug] => thuc-pham
[OrderCategory] => 1
[Description] => Tin tức thực phẩm
[Status] => 1
)
)
这就是我所做的功能。
public function recursive($parentid = 1, $data = NULL, $char = '') {
if (isset($data) && is_array($data)) {
foreach ($data as $key => $item) {
if ($item['IDCategoryParent'] == $parentid) {
$this->recursiveData[$item['IDCategory']] = $item['Name'];
$this->recursive($item['IDCategory'], $data, $char);
echo $item['IDCategory'];
}
}
}
return $this->recursiveData;
}
public function category() {
$category = new Category();
$data = $category->selectByStatus(1); // select data from database.
$recursiveData = $this->recursive(1, $data); // call function
return $recursiveData;
}
但结果只返回1个值是 "ThựcPhẩm" 。我的意思是我的递归函数错误,我不知道为什么这是错误的。请帮帮我。
[更新]:现在我再次尝试使用此代码,但
致命错误:允许的内存大小为134217728字节耗尽(尝试过 分配65488字节)
答案 0 :(得分:1)
问题是您的某些类别将IDCategoryParent
设置为自己的IDCategory
,这会导致问题。
我已将那些引用自己的IDCategory
IDCategoryParent
的内容更改为0
。这意味着他们在level 1
。
请注意,我刚刚在示例代码中使用了一个简单的函数,但如果您愿意,可以将其转换为类方法。
$data = [
[
'IDCategory' => 1,
'IDCategoryParent' => 4,
'Name' => 'Thị trường trong nước',
'Slug' => 'thi-truong-trong-nuoc',
'OrderCategory' => 1,
'Description' => 'Tin tức Thị trường trong nước',
'Status' => 1,
],
[
'IDCategory' => 3,
'IDCategoryParent' => 0,
'Name' => 'Thị trường quốc tế',
'Slug' => 'thi-truong-quoc-te',
'OrderCategory' => 2,
'Description' => 'Tin tức Thị trường quốc tế',
'Status' => 1,
],
[
'IDCategory' => 4,
'IDCategoryParent' => 0,
'Name' => 'Tin tức công ty',
'Slug' => 'tin-tuc-cong-ty',
'OrderCategory' => 3,
'Description' => 'Tin tức công ty Tràng An',
'Status' => 1,
],
[
'IDCategory' => 5,
'IDCategoryParent' => 1,
'Name' => 'Thực phẩm',
'Slug' => 'thuc-pham',
'OrderCategory' => 1,
'Description' => 'Tin tức thực phẩm',
'Status' => 1,
]
];
function createNested($categories, $parentId = 0)
{
$results = [];
foreach($categories as $category) {
if ($parentId == $category['IDCategoryParent']) {
$nextParentId = $category['IDCategory'];
$category['children'] = createNested($categories, $nextParentId);
$results[] = $category;
}
}
return $results;
}
$result = createNested($data);