2011-12-06 7 views
1

私は、その唯一の理由、イベント、および社会的なオブジェクトの最後の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; 

} 

答えて

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

あなたは、別のループの中にいます。

したがって、第1の外部ループ、ex。 $ 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」私はすべてのそれらのループで何かを間違って見ているかもしれません

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"句もチェーンメソッドも省略できます。 EXのためだから、

、この:。

$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

がこの

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; 

} 

は基本的に、私はループの外プロパティassigment $linksArray[$key]->child_links = array();を動かしてみます。このコードブロックを交換してみてください

$linksArray[$key]->child_links[]['link_name'] = $row->content_page_name; 
$linksArray[$key]->child_links[]['link_url'] = $row->permalink; 
+0

偉大な仕事をするが、そのはに沈んでいません私は非常によく。私はそれを私自身に適用する方法を理解しようとしています。 –

+0

ありがとう、私はそれをして、私の新しいコードで更新されます。まだ修正がまだありません。 –

+0

@JeffDavidsonは私の答えを提案で更新しました。しかし、それを試すことはできません –

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