У меня есть база данных с бесконечным количеством вопросов и вопросов для детей. Поэтому вы можете спросить что-то вроде: «какое платежное решение вы принимаете». Тогда ответы ребенка могут быть: «Обработка CC» и «проверка». Тогда у «CC Processing» могут быть дети: «Принимаете ли вы визу и мастер-карту». и т.д.Рекурсивная функция, не возвращающая всех детей
===
У меня есть функция PHP и рекурсивную функцию, установленную в Laravel 5.1, чтобы захватить информацию мне нужно и создать "дерево" массив:
public function create($id)
{
//BUILD THE TREE
$tree = array();
//GET TOP LEVEL ITEMS
$top_level = Questions::where('parentId', 0)->where('industryId', $id)->get()->toArray();
foreach($top_level as $top){
$branch = array();
$branch['id'] = $top['id'];
$branch['industryId'] = $top['industryId'];
$branch['question'] = $top['question'];
$branch['parentId'] = $top['parentId'];
$branch['endPoint'] = $top['endPoint'];
$branch['order'] = $top['order'];
$children = Questions::where('parentId', $top['id'])->get()->toArray();
//CHECK FOR CHILDREN
if(count($children > 0)) {
//THERE ARE CHILDREN PASS THEM TO A RECURSIVE FUNCTION TO GET LIST
$branch['children'] = $this->getChildren($children);
}else {
//THERE ARE NO CHILDREN SET TO EMPTY ARRAY
$branch['children'] = array();
}
$tree[] = $branch;
}
//Send the question tree to the view...
$data['questions'] = $tree;
//Grab the industry
$data['industry'] = Industries::where('id', $id)->get();
return $data['questions'];
//return view('questions.create', $data);
}
public function getChildren($children) {
foreach($children as $child){
$child_branch = array();
$child_branch['id'] = $child['id'];
$child_branch['industryId'] = $child['industryId'];
$child_branch['question'] = $child['question'];
$child_branch['parentId'] = $child['parentId'];
$child_branch['endPoint'] = $child['endPoint'];
$child_branch['order'] = $child['order'];
$children = Questions::where('parentId', $child['id'])->get()->toArray();
//CHECK FOR CHILDREN
if(count($children > 0)) {
//THERE ARE CHILDREN PASS THEM TO THIS FUNCTION (RECURSION) TO GET LIST
$child_branch['children'] = $this->getChildren($children);
}else {
//THERE ARE NO CHILDREN SET TO EMPTY ARRAY
$child_branch['children'] = array();
}
return $child_branch;
}
}
мое "дерево" массив возвращает следующее:
[
{
"id": 18,
"question": "How Do you Accept Payments?",
"parentId": 0,
"endPoint": 0,
"order": 0,
"children": {
"id": 19,
"industryId": 1,
"question": "Card Station",
"parentId": 18,
"endPoint": 0,
"order": 0,
"children": {
"id": 25,
"industryId": 1,
"question": "What type of card station?",
"parentId": 19,
"endPoint": 0,
"order": 0,
"children": null
}
}
},
{
"id": 21,
"question": "What?",
"parentId": 0,
"endPoint": 0,
"order": 0,
"children": {
"id": 22,
"industryId": 1,
"question": "Testing This",
"parentId": 21,
"endPoint": 0,
"order": 0,
"children": null
}
}
]
Не хватает некоторых детей. Я чувствую, что я ПОЧТИ, но я просто не могу собрать финальные фрагменты.
Основываясь на моей снимке базы данных выше, я должен получить родителя «Как вы принимаете платежи с идентификатором 18». Тогда массив моих детей должен НАСТОЯТЕЛЬНО быть: «карточная станция», «вручную» и «тест». Тогда «карточная станция» должна иметь детей, «какой тип карточной станции».
Любые идеи о недостающем звене здесь оцениваются.
Является ли это опечатка? '$ brand ['industryId'] = $ top ['industryId'];' где у вас есть '$ brand', а не' $ branch'? –
Вы запрашиваете свою базу данных в рекурсивном цикле? Кажется, это очень плохая идея для меня. Вы считали, что вместо этого используете модель вложенного набора? –
Это мой первый проект на Laravel. Не уверен, что это вообще вещь PHP или что. Любые примеры, о которых вы можете думать? Я программировал много лет и считаю, что это или нет, это первый раз, когда я пытался сделать такую рекурсию. лол. –