【发布时间】:2016-05-27 11:46:01
【问题描述】:
我在 laravel 中有一个家谱应用程序,我希望能够显示大纲视图(从很久以前的家庭开始,显示其孩子,显示那些孩子的家庭,那些家庭的孩子等)。
所以我做了这个递归 get_descendants 函数:
public static function get_descendants(Family $family, $results_array, $counter)
{
// start new round with a different temp array, to keep track
$counter++;
$this_array = "array_$counter";
$$this_array = [];
array_push ($$this_array, $family->caption);
$kids = FamilyController::get_kids_of_family($family);
// if family has no kids, return 0;
if (!count($kids))
{
return 0;
}
else // add kids and check for their families
{
foreach ($kids as $kid) {
array_push ($$this_array, $kid->firstname);
// get families made by kid- for each one, call get_descendants
$families_made = FamilyController::get_families_person_made($kid);
foreach ($families_made as $new_family) {
array_push($$this_array, self::get_descendants($new_family, $$this_array, $counter));
}
};
// we've gone through the kids, add this round's array to the general results array
array_push ($results_array, $$this_array);
}
return $results_array;
}
我已经通过打印语句确认循环是正确的,但是我保存结果的方式存在问题。我想要这样的东西,顶级家庭展示一次,孩子和他们的家庭嵌套:
array:1 [▼
0 => array:4 [▼
0 => "Padme & Anakin"
1 => "Leia"
2 => array:3 [▼
0 => "Leia & Han"
1 => "Kylo Ren"
]
3 => "Luke"
]
]
但我得到了这个(中间有一个额外的重复):
array:1 [▼
0 => array:4 [▼
0 => "Padme & Anakin"
1 => "Leia"
2 => array:3 [▼
0 => "Padme & Anakin"
1 => "Leia"
2 => array:3 [▼
0 => "Leia & Han"
1 => "Kylo Ren"
]
]
3 => "Luke"
]
]
谁能看出我的错误在哪里?
【问题讨论】:
-
感谢 Ryan- 是的,提供测试方法的好主意!现在一切都在数据库中...我不确定您对制作 PHP 源数组是什么意思,但如果您知道教程页面,我很乐意这样做。
-
Annnnd 我刚刚发现了问题:如果我只返回 $$this_array 并忽略一般的 $results_array,一切都很好。我现在看到“查找错误”帖子是一个糟糕的主意,没有更简单的方法让人们深挖遗憾 - 为混乱或浪费时间感到抱歉
-
很高兴你修好了 :)