スレッド化されたコメントを作成するためのクラスの事前に記述されたスクリプトを見つけましたが、それを実装しようとした後、何も出力されません。配列はデータを保持しており、確認しましたが、関数を呼び出しても何も出力されないので、誰か助けてくれないかと思っていました。
スクリプトはここにあります:
また、以下のとおりです。
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);
}
}
}
私がgermannrummの助けを借りて使用したコードは次のとおりです。
$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();
どんな助けでも大歓迎です!ありがとう!
$tc = new Threaded_comments($all_results);
$tc->print_comments();