* foreach在foreach codeigniter 2里面?

时间:2013-01-11 11:08:28

标签: codeigniter foreach nested

在codeigniter 2.1中我试图按类别显示频道。所以,如果我有一个名为电影的类别,我应该看到电影中的频道列表。我尝试了一个嵌套的foreach循环来实现这一目标,但似乎无法让它发挥作用。

我的表结构是这样的,但更复杂:

Database structure

  • 我的模特:

    <?php
    
    class Pages_model extends CI_Model {
    
    
    function get_channels_by_categ_tv()
    {
    
      $this->db->select('categories.category_name, channels.channel_name');
      $this->db->from('type_categ');
      $this->db->join('categories', 'categories.category_id = type_categ.category_id');
      $this->db->join('channels', 'channels.channel_id = type_categ.channel_id');
      $this->db->order_by('categories.category_id');
    //$this->db->group_by(array('categories.category_id')); 
      $query = $this->db->get();
    
      if($query->num_rows() == 0)
      {
        #no channels
        return false;
      }
    
      return $query->result_array();
    }
    
    }
    
  • 在视图中:

              <ul class="slides">
                <li>
                    <?php foreach ($category_chaneels as $category): ?>
                    <div class="programe-tv_link">
                        <p><?=$category['category_name'];?></p>
                           <dd> <a href=""> >> <?=$category['channel_name'];?></a></dd>
                    </div>
                    <?php endforeach; ?>                  
                </li>
              </ul>
    
  • controller(Pages):

    public function index()
    {
    
    $data['category_chaneels'] = $this->pages_model->get_channels_by_categ_tv();
    
    $this->template->page_view($data);
    }
    

我找到图像1和图像2,我需要像图像2而不是1的结果。

PS。一个频道可以有多个类别。

enter image description here 你能帮助我吗 ? THX

2 个答案:

答案 0 :(得分:2)

在您看来,请尝试

<?php $cat_shown = ''; ?>
<div class="programe-tv_link">
    <?php foreach ($category_chaneels as $category): ?>    
        <?php
        if ($cat_shown != $category['category_name']) {
            echo '<p>' . $category['category_name'] . '</p>';
            $cat_shown = $category['category_name'];
        }
        ?>
        <dd><a href=""> >> <?=$category['channel_name'];?></a></dd>
    <?php endforeach; ?>
</div>

答案 1 :(得分:1)

我的最终代码就是这个。 Maby sombody需要这个。

    <div id="programe-tv-slide" class="flexslider">
        <strong>Programe TV</strong>
        <div class="redLine"></div>

        <?php $cat_cnl = array(); 
              $list = array(); 
              $i=1;
                 foreach ($category_chaneels as $option) { 
                    $catname = $option['category_name'];
                    $chlname = $option['channel_name'];

                    $cat_cnl[$catname][$i] = $chlname;
                    $list[$i] = $catname;
              $i++;
                 }; 
        ?>
        <?php 
            $rows = array_chunk($cat_cnl, 4, TRUE);
            foreach ($rows as $row) {  //var_dump($rows);
        ?>

          <ul class="slides">    
            <?php
                echo ('<li>');
                foreach ($row as $category => $channels) {
                    echo '<div class="programe-tv_link">'; 
                    echo '<p>' . $category . '</p>'; 
                        foreach ($channels as $channel) {
                                echo '<dd><a href="">' . $channel . '</a></dd> '; 
                        };
                    echo '</div>'; 
                    };      
                echo ('</li>'); 
            ?>
          </ul>
          <?php }; ?>
    </div>