この多次元配列を階層構造で表示するふりをして、子のコメントを親の下に表示します。
$comments = Array
(
[0] => Array
(
[id] => 1
[text] => What is the capital of Japan?
[parent_id] => 0
)
[1] => Array
(
[id] => 2
[text] => What is the capital of Canada?
[parent_id] => 0
)
[2] => Array
(
[id] => 3
[text] => I think is Kyoto
[parent_id] => 1
)
[3] => Array
(
[id] => 4
[text] => You are wrong, is Tokyo
[parent_id] => 3
)
ここで多くの回答を検索しましたが、それらのほとんどは、DB への複数のクエリ、または配列内の不要なサブレベル フィールドに関係していました。非常にシンプルで効率的なループ関数で実行できます。私は専門家ではなく、非常に基本的なコードを使用していますが、今回はうまく機能していません。
親コメントのみを表示する関数で初期ループを発行しましょう (親は [parent_id]=0 を持っています)
echo '<ol>';
loopComments($comments, 0);
echo '</ol>';
関数は次のとおりです。
function loopComments($comments, $parent) {
foreach ($comments as $post) {
if ($post[parent_id] == $parent) {
printPost($post);
}
}
}
//The function below prints the post and searches for related answers
//sadly FAILS when looping again!
function printPost($post) {
echo "<li>".$post['text']."</li>";
loopComments($comments, $post['parent_id']);
}
悲しいことに、「警告: foreach() に無効な引数が指定されました」というメッセージが表示されます