【发布时间】:2019-07-02 21:36:10
【问题描述】:
我得到了一个递归函数,目前echo 的结果。我希望这个函数返回结果并在标记内使用foreach 循环它们。
我知道我应该对每个数组使用某种迭代来获得我想要的结果,但没有成功。目前我的代码看起来像这样(尝试迭代):
public static function recursiveChildCategory($categories = array(), $depth = 0, $i = 0) {
$ca = [];
// Loop through categories
foreach($categories as $key => $category){
echo str_repeat(" ", $depth);
echo "<a href='".implode('/', $category['breadcrumb'])."'>{$category['title']}</a>";
echo '<br>';
$ca[$i] = [
'id' => $category['id'],
'title' => $category['title'],
];
if(isset($category['child'])) {
// Loop
self::recursiveChildCategory($category['child'], $depth + 1, $i++);
}
}
return $ca;
}
以及传入函数的数组:
Array (
[0] => Array (
[id] => 7
[title] => Deserts
[slug] => deserts
[child] => Array (
[0] => Array (
[id] => 8
[title] => Space
[slug] => space
[child] => Array (
[0] => Array (
[id] =>
[title] =>
[slug] =>
[child] => Array ( )
)
)
)
)
)
)
目前它只返回第一级子类别“沙漠”,而没有返回“太空”。
作为期望的结果,我希望函数返回具有 $depth 的所有类别和多个子类别的无限路径(与当前 echo 执行相同的工作)。
感谢您的建议
【问题讨论】:
-
您没有对递归调用的结果做任何事情:
self::recursiveChildCategory($category['child'], $depth + 1, $i++);。 -
每次使用函数时,都会为
$ca值分配一个空数组,并且从不使用$depth(与$i相同)所以试试这个recursiveChildCategory($categories = array(), $i = 0, $ca = []),删除 @ 987654332@ 来自函数,现在执行self::recursiveChildCategory($category['child'], $i++, $ca); -
是的,我明白了。我尝试了多种变体,这是其中之一:\
-
您可以编辑您的问题并添加所需的输出吗?
-
@MickaëlLeger 只要您不使用递归调用的返回值,您将永远不会看到内部数组中的任何内容,因此除非您通过引用传递
$ca,否则您的更改将不会做任何东西。
标签: php