Ben böyle bir şekilde çocukların aranabilecek parentid ile 'kategorilerinin bir ağaç yapısı oluşturma:
ID | Name | ParentID
1 1 0
2 2 1
3 3 2
4 4 1
Bu şekilde sonuçlanır:
1 = 1
2 = 1 -> 2
3 = 1 -> 2 -> 3
4 = 1 -> 4
1 bir çocuk hangi 3 is a child of 2 demektir.
Ben sadece ikinci sınıfa olsun çünkü döngü fonksiyonu - (> 3 - 1 -> 2) (1> 2) ancak üçüncü - bu fikri (> ilişkiler ayarlanır göstermek için birlikte) almaya çalışırken Ben bunun için kullanın.
//put all ID's in an array
while ($row2 = $connector->fetchArray($result2)){
$id = $row2['ID'];
$parents[$id] = $row2['name'];
}
// show the tree-structure
while ($row = $connector->fetchArray($result)){
if($row['parentid']!=0)echo $parents[$row['parentid']].' -> ';
echo $row['name'].' - ';
echo '<br>';
}
Ben değiştirmek için iki şey istiyorum:
- kodu otomatik olarak bir ağaç olarak gerekli büyüklükte üretmek var.
- while döngülerinde i çalışması için iki kez ($ sonucunda, bir zamanlar $ result2) $ sonucu seçmek zorunda. Bu $ tamamen aynı veritabanı sorgu var neden:
SELECT ID,name,parentid FROM categories
to fetch results from. I'd like to only declare this once.
Thanks for all the good answers. I've gone with the easiest, less-code-to-implement approach:
$result = $connector->query('SELECT ID,name,parentid FROM categories');
// Get an array containing the results.
$parents = array();
while ($row = $connector->fetchArray($result)){
$id = $row['ID'];
$parents[$id] = array('ID' => $row['ID'],'name' => $row['name'],'parentid' => $row['parentid']);
}
foreach ($parents as $id => $row){
$pid=$id;
$arrTmp= array();
do { // iterate through all parents until top is reached
$arrTmp[]=$pid;
$pid = $parents[$pid]['parentid'];
}while ($pid != 0);
$arrTmp = array_reverse($arrTmp);
foreach($arrTmp as $id){
echo $parents[$id]['name'].' -> ';
}
echo '<br>';
}