Когда вы здесь зацикливаетесь:
foreach ($query->result() as $row)
{
$site_content_page_id = $row->site_content_pages_id;
$linksArray[$key]->child_links = array();
if ($site_content_page_id != 0)
{
вы находитесь внутри другого цикла, поэтому при каждом проходе этого цикла ключ $ остается неизменным.
Итак, 1-й внешний цикл , отл. $ key = 'key1'; Я буду использовать некоторый псевдокод, чтобы дать идею:
foreach results as row:
(loop nr 1):
linksarray['key1'] = empty array.
linksarray['key1'] = value;
(loop nr 2):
linksarray['key1'] = empty array
linksarray['key1'] = value2
endforeach;
2-й внешний цикл , $ Key = 'key2'
foreach results as row:
(loop nr 1):
linksarray['key2'] = empty array.
linksarray['key2'] = value;
(loop nr 2):
linksarray['key2'] = empty array
linksarray['key2'] = value2
endforeach;
Я мог что-то не так смотреть во всех этих циклах, здесь вечер, и я немного устал:)
Да, и совет: ваш код легко становится немного трудным для чтения; небольшим улучшением было бы опустить имя таблицы (так как оно не обязательно), особенно когда оно такое длинное; более того, в AR вы можете опустить предложение "from", а также метод цепочки.
Итак, например, это:
$this->db->select('site_menu_structures_links_children.link_name, site_menu_structures_links_children.site_content_pages_id, site_menu_structures_links_children.link_url');
$this->db->from('site_menu_structures_links_children');
$this->db->where('site_menu_structures_links_children.site_menu_structures_links_id', $link->id);
$query = $this->db->get();
Может быть легко переписано как:
$query = $this->db->select('link_name,site_content_pages_id,link_url')
->where('site_menu_structures_links_id',$link->id)
->get('site_menu_structures_links_children');
Это может помочь вам определить общий поток кода, выявив различные прогоны
UPDATE
Попробуйте это
<code>function getSubMenuPages()
{
$this->db->select('id');
$this->db->where('short_name', 'mainnav');
$query = $this->db->get('site_menu_structures');
$menu_id = $query->row()->id;
$this->db->select('id, short_name, is_category');
$this->db->where('menu_structure_id', $menu_id);
$query2 = $this->db->get('site_menu_structures_links');
if ($query2->num_rows() > 0)
{
$linksArray = $query2->result();
echo "<pre>";
print_r( $linksArray );
echo "
";
foreach ($ linksArray as $ key => $ link)
{
если ($ link-> is_category == 'Да')
{
$ this-> db-> select ('link_name, site_content_pages_id, link_url');
$ this-> db-> where ('site_menu_structures_links_id', $ link-> id);
$ query3 = $ this-> db-> get ('site_menu_structures_links_children');
if ($ query3-> num_rows ()> 0)
{
$ linksArray [$ key] -> child_links = array ();
foreach ($ query3-> result () как $ row)
{
$ site_content_page_id = $ row-> site_content_pages_id;
// $ linksArray [$ key] -> child_links = array ();
если ($ site_content_page_id! = 0)
{
$ this-> db-> select ('content_page_name, permalink');
$ this-> db-> where ('id', $ site_content_page_id);
$ query4 = $ this-> db-> get ('site_content_pages');
if ($ query4-> num_rows ()> 0)
{
$ row = $ query4-> row ();
$ linksArray [$ key] -> child_links [] ['link_name'] = $ row-> content_page_name;
$ linksArray [$ key] -> child_links [] ['link_url'] = $ row-> permalink;
}
}
еще
{
$ linksArray [$ key] -> child_links [] ['link_name'] = $ row-> link_name;
$ linksArray [$ key] -> child_links [] ['link_url'] = $ row-> link_url;
}
}
}
}
}
}
return $ linksArray;
}
По сути, я переместил присвоение свойства $linksArray[$key]->child_links = array();
за пределы цикла. Вслед за другим циклом, который может иметь больше значений, я создал индекс для каждого цикла:
$linksArray[$key]->child_links[]['link_name'] = $row->content_page_name;
$linksArray[$key]->child_links[]['link_url'] = $row->permalink;