1 回答

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊
您將在$node['children']此行中傳遞數(shù)組的副本$this->removeChildlessBranches($node['children']);(如果您在查找通過引用和通過值傳遞之前還沒有聽說過它)。因此,將對(duì)該副本進(jìn)行任何后續(xù)更改,而不是對(duì)原始數(shù)組(也是副本)進(jìn)行更改。更改的結(jié)果然后被丟棄,因?yàn)槟鷽]有對(duì)它們做任何事情。
您可以通過將行更改為 this 來解決該問題$nodes[$key]['children'] = $this->removeChildlessBranches($node['children']);。
但是請(qǐng)注意,您現(xiàn)在可能有一個(gè)沒有子節(jié)點(diǎn)且不是葉節(jié)點(diǎn)的節(jié)點(diǎn),但由于您已經(jīng)在該級(jí)別進(jìn)行了修剪,因此不會(huì)被正確刪除。首先修剪孩子然后取消設(shè)置應(yīng)該會(huì)給你想要的結(jié)果:
private function removeChildlessBranches(array $nodes)
{
foreach ($nodes as $key => $node) {
$nodes[$key]['children'] = $this->removeChildlessBranches($node['children']);
if (empty($nodes[$key]['children']) && !$nodes[$key]['leaf']) {
unset($nodes[$key]);
}
}
return $nodes;
}
- 1 回答
- 0 關(guān)注
- 136 瀏覽
添加回答
舉報(bào)