我已經寫了一個循環,它首先檢查子類別表中是否存在基於數據庫中名爲'category_id'的字段的任何子類別。如何使這個循環成爲遞歸循環?
我想在這裏做的是遞歸地檢查子類別以查看是否有任何子類別的'parent_id'設置爲相應的ID。檢查需要做的是添加到數組(請參閱下面的代碼片段以獲得更好的解釋)。
首先來說明的示例結構:
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?
簡短說明:包裹在函數中使用'foreach(){}'並在$ if中使用$ check作爲參數調用if(count($ check)> 0){}'。 – Jeff