我的递归函数问题

ret*_*urn 4 php multidimensional-array

我正在设计评论系统,但我的递归函数存在一些问题.如果查看下面的代码:

$list = array(
            array('id'=>1,'parent'=>0),
            array('id'=>2,'parent'=>1),
            array('id'=>3,'parent'=>0),
            array('id'=>4,'parent'=>0),
            array('id'=>5,'parent'=>4),
            array('id'=>6,'parent'=>4)
        );

$c = count($list);

$comment = array();

function setParentStyleComment($cmnt){
    return 'id: '.$cmnt['id'].' - parent: '.$cmnt['parent'].' - [PARENT]';
}

function setReplyStyleComment($cmnt){
    return 'id: '.$cmnt['id'].' - parent: '.$cmnt['parent'].' - [REPLY]';
}

function getComment($p) {
    global $comment,$list,$c;
    foreach($list as $L){
        if(($L['parent'] == 0 || $L['parent'] != $p) && $L['id'] != $p) 
        {
            $comment[] = setParentStyleComment($L);
            $x = $L['id'];
            array_shift($list);
            getComment($x);
        } 
        else if($L['id'] != $p) 
        {
            $comment[] = setReplyStyleComment($L);
            $x = $L['id'];
            array_shift($list);
            if($x < $c){
                getComment($x);
            }
        }
    }
}

getComment(0);  
echo "<pre>";
print_r($comment);
echo "</pre>\n<br/>";
Run Code Online (Sandbox Code Playgroud)

上面的代码,有这个结果:

Array
(
[0] => id: 1 - parent: 0 - [PARENT]
[1] => id: 2 - parent: 1 - [REPLY]
[2] => id: 3 - parent: 0 - [PARENT]
[3] => id: 4 - parent: 0 - [PARENT]
[4] => id: 5 - parent: 4 - [REPLY]
[5] => id: 6 - parent: 4 - [PARENT]
)
Run Code Online (Sandbox Code Playgroud)

但它必须有这样的结果:

Array
(
[0] => id: 1 - parent: 0 - [PARENT]
[1] => id: 2 - parent: 1 - [REPLY]
[2] => id: 3 - parent: 0 - [PARENT]
[3] => id: 4 - parent: 0 - [PARENT]
[4] => id: 5 - parent: 4 - [REPLY]
[5] => id: 6 - parent: 4 - [REPLY]
)
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个功能问题?

Bab*_*aba 6

我认为你正在做一个简单的任务......一个简单的循环就足够了

$final = array();
foreach ( $list as $value ) {
    $final[] = !$value['parent'] 
               ? setParentStyleComment($value)
               : setReplyStyleComment($value);
}

print_r($final);
Run Code Online (Sandbox Code Playgroud)

产量

Array
(
        [0] => id: 1 - parent: 0 - [PARENT]
        [1] => id: 2 - parent: 1 - [REPLY]
        [2] => id: 3 - parent: 0 - [PARENT]
        [3] => id: 4 - parent: 0 - [PARENT]
        [4] => id: 5 - parent: 4 - [REPLY]
        [5] => id: 6 - parent: 4 - [REPLY]
)
Run Code Online (Sandbox Code Playgroud)

观看现场演示