A noter que dans la première partie de ton code, tu fais une requête qui va chercher tous les éléments dont le parent a pour id 0 (parent_comment_id = '0').
Pour chacun d'eux tu fais ensuite appel à get_reply_comment() en indiquant l'id de l'enregistrement concerné pour qu'elle aille chercher tous les éléments dont le parent est cet id.
En somme, la boucle que tu fais dans la première partie de ton code pourrait aussi être géré par ta fonction en lui passant en paramètre l'id parent "0" (ou sans lui passer ce paramètre d'ailleurs, puisqu'il s'agit de la valeur par défaut de la fonction).
Ton code deviendrait alors :
<?php
//fetch_comment.php
$connect = new PDO('***');
$output = get_reply_comment($connect, 0); // appel la fonction récursive à partir du niveau 0
echo $output;
function get_reply_comment($connect, $parentId = 0, $marginleft = 0)
{
$output = '';
$query = " SELECT * FROM tbl_comment WHERE parent_comment_id = :parentId ORDER BY comment_id DESC "; // j'ai ajouté le order by ici
$statement = $connect->prepare($query);
$statement->execute(
array(
':parentId' => $parentId
)
);
$result = $statement->fetchAll();
if($parentId == 0)
{
$marginleft = 0;
}
else
{
$marginleft = $marginleft + 50;
}
if($result)
{
foreach ($result as $row) {
$date = new \DateTime($row["date"]);
$formatedDate = (new IntlDateFormatter( 'fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::SHORT));
$output .= '
<div class="separator"</div>
<div class="box-light" style="margin-left:'.$marginleft.'px">
<div class="chapeau">@ <b>'.$row["comment_sender_name"].'</b></div><div class="white"><i>'.$formatedDate->format($date).'</i></div>
<div class="texte-com">'.nl2br($row["comment"]).'</div>
<div class="reponse"><button type="button" class="button1 reply" id="'.$row["comment_id"].'">Répondre</button></div>
</div>
';
$output .= get_reply_comment($connect, $row["comment_id"], $marginleft);
}
}
return $output;
}
?>Tu devrais obtenir le même résultat en nettement moins de lignes de code