2014-11-05 3 views
0

Я нашел это здесь: Category Hierarchy (PHP/MySQL)Категория Иерархия (PHP/MySQL) в Yii

И я хочу, чтобы отобразить этот код, но он не работает правильно.

я получил следующую иерархию:

-Airsoft 
--Scopes 

Это все. Но код отображения:

-Airsoft 
--Scopes (So far so good) 
-Scopes <--- this one should not be here! 

Вот код:

public static function producten(){ 

     $connection=Yii::app()->db; // assuming you have configured a "db" connection 
     $sql = 'SELECT id, parent, naam FROM categories ORDER BY naam'; 
     $command=$connection->createCommand($sql); 
     $dataReader=$command->query(); 

     $refs = array(); 

     foreach ($dataReader as $row) 
     { 
      $ref = & $refs[$row['id']]; 

      $ref['parent'] = $row['parent']; 
      $ref['naam'] = $row['naam']; 

      if ($row['parent'] == NULL) 
      { 
       $list[$row['id']] = & $ref; 
      } 
      else 
      { 
       $refs[$row['parent']]['children'][$row['id']] = & $ref; 
      } 
     } 

     function toUL(array $array) 
     { 
      $html = '<ul>' . PHP_EOL; 

      foreach ($array as $value) 
      { 
       $html .= '<li>' . $value['naam']; 
       if (!empty($value['children'])) 
       { 
        $html .= toUL($value['children']); 
       } 
       $html .= '</li>' . PHP_EOL; 
      } 

      $html .= '</ul>' . PHP_EOL; 

      return $html; 
     } 
     print_r($refs); 
     echo toUL($refs); 
    } 

print_r() там проявляет:

Array ([1] => Array ([parent] => [naam] => Airsoft [children] => Array ([2] => Array ([parent] => 1 [naam] => Scopes))) [2] => Array ([parent] => 1 [naam] => Scopes)) 

Может кто-то выяснить, что случилось с кодом и помочь мне пожалуйста?

+0

Попробуйте добавить GROUP BY Наама – Naruto

+0

@Naruto никакой разницы :( – Refilon

+0

Ну проблема в том, что вы не проверить, если ребенок уже существует для этого родителя .. – Naruto

ответ

1

Вы можете попробовать это:

$connection=Yii::app()->db; // assuming you have configured a "db" connection 
$sql = 'SELECT id, parent, naam FROM categories ORDER BY naam'; 
$command=$connection->createCommand($sql); 
$dataReader=$command->queryAll(); 


function createList($elements, $parentId = 0) { 
     $branch = array(); 

     foreach ($elements as $element) { 
      if ($element['parent'] == $parentId) { 
       $children = createList($elements, $element['id']); 
       if ($children) { 
        $element['children'] = $children; 
       } 
       $branch[] = $element; 
      } 
     } 

     return $branch; 
    } 

    $list = createList($dataReader); 
    CVarDumper::dump($list, 5678, true); 
+0

Обратите внимание, что это указано в http://stackoverflow.com/questions/8587341/recursive-function-to-generate-multidimensional-array-from-database-result/, но соответствует вашей проблеме. –

+1

Ты такой потрясающий @ Али! Работает снова! Спасибо друг! – Refilon

+0

@ Deer-Outdoor.nl Добро пожаловать, дорогая :) рад, что это помогло :) –

Смежные вопросы