【发布时间】:2017-09-15 16:56:25
【问题描述】:
我编写了一个循环,首先检查在这种情况下,类别是否有任何基于子类别表中名为“category_id”的数据库中的字段的子类别。
我希望它在这里做的是递归检查子类别,看看是否有任何子类别将“parent_id”设置为相应的 id。检查需要做的是添加到一个数组中(参见下面的代码 sn-p 以获得更好的解释)。
首先说明一个示例结构:
Main Category
- Sub category level 1 (identified by 'category_id' matching 'id' of Main Category)
- - Sub category level 2 (identified by 'parent_id' matching 'id' of Sub category level 1
- - - Sub category level 3 (identified by 'parent_id' matching 'id' of Sub category level 2
这打算无限期地继续下去。下面是一个正确执行任务的非递归函数示例:
$final = [];
foreach($values as $k => $v) {
$check = collect(Subcategory::where('category_id', $v['id'])->get());
$v['subcategory'] = 0;
$final[] = $v;
if (count($check) > 0) {
foreach($check as $c) {
$val = $c->toArray();
$val['name'] = '- '.$val['name'];
$val['subcategory'] = 1;
$final[] = $val;
/* recursive here onward */
$check2 = collect(Subcategory::where('parent_id', $c['id'])->get());
if (count($check2) > 0) {
foreach($check2 as $c) {
$val = $c->toArray();
$val['name'] = '- - '.$val['name'];
$final[] = $val;
$check3 = collect(Subcategory::where('parent_id', $c['id'])->get());
if (count($check3) > 0) {
foreach($check3 as $c) {
$val = $c->toArray();
$val['name'] = '- - - '.$val['name'];
$final[] = $val;
}
}
}
}
}
}
}
尽管看到重复的部分,但我无法弄清楚如何进行递归。任何人都可以建议一个递归函数,在检查返回 0 之前始终执行代码 sn-p 中“递归此处向前”以下的内容?
【问题讨论】:
-
简短说明:将
foreach(){}包装在一个函数中,并在if(count($check)>0) { }中调用此函数,并以$check 作为参数。
标签: php arrays laravel function recursion