问题
In codeigniter 2.1 I'm trying to display channels by category. So if i have a category called Film, i should see a list of Channels within Film. I tried a nested foreach loop to accomplish this but can't seem to get it to work.
My tables structure is something like this but more complicated:

My model:
<?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(); } }
in the view:
<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); }
I atached image 1 and image 2, i need result like image 2 not 1.
PS. One channel can have many categories.

回答1:
In your view, try
<?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>
回答2:
My final code is this. Maby sombody need this.
<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>
来源:https://stackoverflow.com/questions/14276883/foreach-inside-foreach-codeigniter-2