function my_recurse($id,$tree=array())
{
$hols = array();
$overall = array();
$asd = $this->db->get_where('story', array('story_id'=>$id))->row_array();
if(isset($asd['story_id'])){
$preds = explode(',',$asd['story_pred']);
if($preds[0] != 0)
{
$hols[] = $preds[0];
$hols = array_merge($tree, $hols);
$this->my_recurse($preds[0],$hols);
}
}
print_r($hols);
}
比方说我有这棵树
story1 NULL story2 story1 story3 story2 story4 story3
当我在函数中输入story4作为我的id时,它总是返回story3而不是story1,story2和story3。不知道为什么它会在递归发生后反转输出。任何建议将不胜感激
答案 0 :(得分:0)
如果不知道您的数据库结构,很难说这是否容易或可能,但您不需要递归来查找到根节点的树节点的路径 - 您可以使用自联接来执行此操作。此外,您应该避免在递归函数中进行查询。如果您可以描述表结构,我可以尝试向您展示如何按顺序获取树路径的结果集。
答案 1 :(得分:0)
你的代码的问题是它的传递当前的pred到父,因此反向树。相反它应该从父
获得预测器如果我明白你的要求,这应该有用
<?php
function my_recurse($id) {
$hols = array();
$overall = array();
$asd = getFromDB($id);
if(isset($asd['story_id'])){
$preds = explode(',',$asd['story_pred']);
if($preds[0] != 0) {
$hols[] = $preds[0];
$hols = array_merge(my_recurse($preds[0]), $hols);
} else {
return $hols;
}
print "preds of {$id} : ";
print implode(', ', $hols) . "\n";
return $hols;
}
}
function getFromDB($id) {
$data = array(1 => array('story_id'=>1, 'story_pred' => '0'),
2 => array('story_id'=>2, 'story_pred' => '1'),
3 => array('story_id'=>3, 'story_pred' => '2'),
4 => array('story_id'=>4, 'story_pred' => '3'),
);
return $data[$id];
}
my_recurse(4);
运行上面的脚本..
$ /usr/bin/php recurse.php
preds of 2 : 1
preds of 3 : 1, 2
preds of 4 : 1, 2, 3
PS:请添加您的样本输入,输出和预期输出。我花了15分钟尝试了解你的问题。