Показывать только последний элемент в массиве - PullRequest
1 голос
/ 07 декабря 2011

Я пытаюсь выяснить, почему он показывает только последние дочерние_ссылки в реестре, событиях и социальных объектах. Я включил сайт, который имеет print_r функции массива. Любая помощь будет оценена.

http://kansasoutlawwrestling.com/

<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); 
    $query = $this->db->get('site_menu_structures_links');

    if ($query->num_rows() > 0) 
    {
        $linksArray = $query->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); $ query = $ this-> db-> get ('site_menu_structures_links_children'); if ($ query-> num_rows ()> 0) { foreach ($ query-> 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); $ query = $ this-> db-> get ('site_content_pages'); if ($ query-> num_rows ()> 0) { $ row = $ query-> row (); $ linksArray [$ key] -> child_links = array ( 'link_name' => $ row-> content_page_name, 'link_url' => $ row-> Постоянная ссылка ); } } еще { $ linksArray [$ key] -> child_links = array ( 'link_name' => $ row-> link_name, 'link_url' => $ row-> link_url ); } } } } } } return $ linksArray; }

Ответы [ 2 ]

4 голосов
/ 07 декабря 2011

Когда вы здесь зацикливаетесь:

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;
1 голос
/ 07 декабря 2011

Попробуйте заменить этот блок кода:

$this->db->select('link_name, site_content_pages_id, link_url');
$this->db->where('site_menu_structures_links_id', $link->id); 
$query = $this->db->get('site_menu_structures_links_children');
if ($query->num_rows() > 0) 
{
    $linksArray[$key]->child_links = array();

    foreach ($query->result() as $row)
    {
        $site_content_page_id = $row->site_content_pages_id;

        if ($site_content_page_id != 0)
        {
            $this->db->select('content_page_name, permalink');
            $this->db->where('id', $site_content_page_id); 
            $query2 = $this->db->get('site_content_pages');
            if ($query2->num_rows() > 0)
            {
                $row2 = $query2->row(); 
                array_push($linksArray[$key]->child_links, array(
                                                'link_name'  => $row2->content_page_name,
                                                'link_url' => $row2->permalink
                                             ));
            }
        }
        else
        {
            array_push($linksArray[$key]->child_links, array(
                                                'link_name'  => $row->link_name,
                                                'link_url' => $row->link_url
                                             ));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...