Я пытаюсь создать двухмерный массив всех категорий в иерархии / дереве.
Таким образом, родитель на первом месте, затем его подкатегории, затем категории 3-го уровня, а затем 4-й уровень.
У меня есть таблица с такими записями
cc_id category_name parent_id level 1 general 0 1 2 Books 1 2 3 Magazines 1 2 4 English Book 2 3 5 Love Story 4 4
Я хочу, чтобы результат
Array ( [0] => Array ( [cc_id] => 1 [parent_id] => 0 [category_name] => General [level] => 1 ) [1] => Array ( [cc_id] => 2 [parent_id] => 1 [category_name] => Books [level] => 2 ) [2] => Array ( [cc_id] => 4 [parent_id] => 2 [category_name] => English Book [level] => 3 ) [3] => Array ( [cc_id] => 4 [parent_id] => 3 [category_name] => Love Story [level] => 4 ) [4] => Array ( [cc_id] => 3 [parent_id] => 1 [category_name] => Magazine [level] => 2 ) )
Я могу добиться этого, если я могу комбинировать html и php-код на одной странице. Но я использую структуру MVC, поэтому это мое требование. Я создаю массив во вложенном порядке. Потому что я не могу использовать условия else на моей странице просмотра.
То, что я пытаюсь в моем файле controller / lib,
$result = $DB->query("SELECT * FROM " . DB_PREFIX . "classified_categoies WHERE is_publish=1"); //------------------------------------------------ // Check if resultset contains any rows //------------------------------------------------ if ($DB->num_rows($result)) { $i = 0; //------------------------------------------------ // Fetch resultset //------------------------------------------------ while( $obj = $DB->fetch_object($result) ) { //------------------------------------------------ // Set values //------------------------------------------------ if($obj->parent_id==0 and $obj->level==1) { $entries_obj[$i]['category_id'] = $obj->cc_id; $entries_obj[$i]['parent_id'] = $obj->parent_id; $entries_obj[$i]['category_name'] = $obj->category_name; $entries_obj[$i]['level'] = $obj->level; $i++; } $result2 = $DB->query("SELECT * FROM " . DB_PREFIX . "classified_categoies WHERE is_publish=1 AND parent_id=".$obj->cc_id." order by level asc"); if ($DB->num_rows($result)) { while( $obj2 = $DB->fetch_object($result2) ) { if($obj->level==2) { $entries_obj[$i]['category_id'] = $obj2->cc_id; $entries_obj[$i]['parent_id'] = $obj2->parent_id; $entries_obj[$i]['category_name'] = $obj2->category_name; $entries_obj[$i]['level'] = $obj2->level; $i++; } } } }
Но, делая это, я могу получить до 2-х категорий. Кажется, используя вышеприведенную логику, я должен написать 4 запроса. Там нет никакого эффективного способа, который вы, люди, можете предложить.
В общем, это должно быть так
Genaral Books English books Love Story Magazines
Но я хочу вывод в двухмерном массиве.