السلام عليكم
المقصود من الموضوع هو طباعة التعليق حسب ترتيب طبقي:
كود PHP:
title1
-title3
--title5
--title8
-title4
-title7
--title9
---title10
title2
-title6
هذه هي قاعدة البيانات التي لدينا
وهي تمامًا ما يتم تخزينه في ال mysql لكن فضّلت وضعها على شكل مصفوفة حتى لا ادخل
في تفاصيل الاتصال بقواعد البيانات:
كود PHP:
$data = array(
0=>array("id"=>1,"title"=>"title1","parent"=>0),
1=>array("id"=>2,"title"=>"title2","parent"=>0),
2=>array("id"=>3,"title"=>"title3","parent"=>1),
3=>array("id"=>4,"title"=>"title4","parent"=>1),
4=>array("id"=>5,"title"=>"title5","parent"=>3),
5=>array("id"=>6,"title"=>"title6","parent"=>2),
6=>array("id"=>7,"title"=>"title7","parent"=>1),
7=>array("id"=>8,"title"=>"title8","parent"=>3),
8=>array("id"=>9,"title"=>"title9","parent"=>7),
9=>array("id"=>10,"title"=>"title10","parent"=>9)
);
هذا بالضبط ما يمكن جلبه من قواعد البيانات عند الاستعلام
الان نرتب البيانات في مصفوفة جديدة حسب الparent
ونستدعي الدالة المسؤولة عن الطباعة:
كود PHP:
$parent = array();
foreach ($data as $k=>$v)
$parent[$v['parent']][]=$v;
print_replys($parent,0);
واخيرًا هذه هي الدالة المسؤولة عن الترتيب:
كود PHP:
function print_replys(array $tree,$index,$depth=0)
{
if (count($tree[$index])==0)return ;
foreach ($tree[$index] as $v):
echo "<p>".str_repeat("-",$depth);
echo "{$v['title']}</p>";
print_replys($tree,$v['id'],$depth+1);
endforeach;
}
وهي تعمل عن طريق ال backtracking
اي استدعاء الدالة داخل حلقة تكرار في الدالة نفسها
الكود كامل:
كود PHP:
<?php
$data = array(
0=>array("id"=>1,"title"=>"title1","parent"=>0),
1=>array("id"=>2,"title"=>"title2","parent"=>0),
2=>array("id"=>3,"title"=>"title3","parent"=>1),
3=>array("id"=>4,"title"=>"title4","parent"=>1),
4=>array("id"=>5,"title"=>"title5","parent"=>3),
5=>array("id"=>6,"title"=>"title6","parent"=>2),
6=>array("id"=>7,"title"=>"title7","parent"=>1),
7=>array("id"=>8,"title"=>"title8","parent"=>3),
8=>array("id"=>9,"title"=>"title9","parent"=>7),
9=>array("id"=>10,"title"=>"title10","parent"=>9)
);
$parent = array();
foreach ($data as $k=>$v)
$parent[$v['parent']][]=$v;
print_replys($parent,0);
function print_replys(array $tree,$index,$depth=0)
{
if (count($tree[$index])==0)return ;
foreach ($tree[$index] as $v):
echo "<p>".str_repeat("-",$depth);
echo "{$v['title']}</p>";
print_replys($tree,$v['id'],$depth+1);
endforeach;
}
?>