仅显示数组中的最后一项

时间:2011-12-06 20:19:06

标签: php codeigniter

我正在试图弄清楚为什么它只显示名单,事件和社交对象中的最后一个child_links。我已经包含了具有数组函数的print_r的站点。任何帮助将不胜感激。

http://kansasoutlawwrestling.com/

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 "</pre>";
        foreach ($linksArray as $key => $link)
        {
            if ($link->is_category == 'Yes')
            {
                $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() as $row)
                    {
                        $site_content_page_id = $row->site_content_pages_id;
                        $linksArray[$key]->child_links = array();
                        if ($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->permalink
                                                             );
                            }
                        }
                        else
                        {
                            $linksArray[$key]->child_links = array(
                                                                'link_name'  => $row->link_name,
                                                                'link_url' => $row->link_url
                                                             );
                        }
                    }
                }
            }
        }
    }

    return $linksArray;

}

2 个答案:

答案 0 :(得分:4)

当你在这里循环时:

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)
                        {

你在另一个循环中,所以在这个循环的每个段落中,$ key保持不变。

所以,第一个外部循环,例如。 $ 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;

第二个外部循环,$ 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');

这样做可能有助于您确定常规代码流,发现各种运行

更新

试试这个

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 "</pre>";
        foreach ($linksArray as $key => $link)
        {
            if ($link->is_category == 'Yes')
            {
                $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() as $row)
                    {
                        $site_content_page_id = $row->site_content_pages_id;
                        //$linksArray[$key]->child_links = array();
                        if ($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;
                            }
                        }
                        else
                        {
                            $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 :(得分:1)

尝试替换此代码块:

$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
                                             ));
        }
    }
}