Я нашел это здесь: Иерархия категорий (PHP / MySQL)
И я хочу отобразить этот код, но он работает неправильно.
Я получил следующую Иерархию:
-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 ) )
Может кто-нибудь выяснить, что не так с кодом и помочь мне, пожалуйста?
Вы можете попробовать следующее:
$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);