Can anyone help me with php threaded comments?

1k Views Asked by At

I found a pre-written script of a class to create threaded comments, but after trying to implement it, nothing prints. The array si holding data, and I have confirmed that, but, nothing will print when the function is called, so I was wondering if someone could please help.

the script can be found here:

It is also below as follows:

class Threaded_comments
{

    public $parents  = array();
    public $children = array();

    /**
     * @param array $comments
     */
    function __construct($comments)
    {
        foreach ($comments as $comment)
        {
            if ($comment['parent_id'] === NULL)
            {
                $this->parents[$comment['id']][] = $comment;
            }
            else
            {
                $this->children[$comment['parent_id']][] = $comment;
            }
        }
    }

    /**
     * @param array $comment
     * @param int $depth
     */
    private function format_comment($comment, $depth)
    {
        for ($depth; $depth > 0; $depth--)
        {
            echo "\t";
        }

        echo $comment['text'];
        echo "\n";
    }

    /**
     * @param array $comment
     * @param int $depth
     */
    private function print_parent($comment, $depth = 0)
    {
        foreach ($comment as $c)
        {
            $this->format_comment($c, $depth);

            if (isset($this->children[$c['id']]))
            {
                $this->print_parent($this->children[$c['id']], $depth + 1);
            }
        }
    }

    public function print_comments()
    {
        foreach ($this->parents as $c)
        {
            $this->print_parent($c);
        }
    }

}

the code i have used with help from germannrumm is as follows:

$q = $DBH->prepare("SELECT id, parent_id, comment FROM comments WHERE page = ?");
$q->bind_param("i", $page);
$q->execute();

$q->bind_result($id, $parent_id, $text);

$all_results = array();

while ($q->fetch()) {
    $all_results[] = array(
        'id' => $id, 
        'parent_id' => $parent_id, 
        'text' => $text);
}
$q->close();

any help is greatly appreciated! thanks!

$tc = new Threaded_comments($all_results);
$tc->print_comments();
1

There are 1 best solutions below

9
Naatan On BEST ANSWER

The class is working properly, but we can't test your database code for you. Make sure that you are indeed passing an array to the class. Do a var_dump($all_results) right before you initiate the class.