使用Codeigniter实现字母顺序列表

时间:2014-04-23 17:49:32

标签: php codeigniter

我已经搜索了这个问题的答案,唉,它在舞会之夜就像一个辣妹一样避开了我。

我基本上构建了一个客户端请求的目录,该目录需要按字母顺序排列的标题,后跟类别名称。这有点麻烦,我使用的是codeigniter。

我有一个基本的模型函数,可以按名称获取所有主要类别。

function getAllMainCats(){
   $this->db->from('main_categories');
   $this->db->order_by('name', 'ASC');

   $query = $this->db->get();
   return $query->result_array();
}

这就是我被困的地方。 我在网上看到了几个不同的结果,但是我无法通过与Codeigniter一起成功修改它们。

使用伪代码,这就是我想象它会起作用的方式

getAllMainCategories
foreach( mainCategories as mainCategory){
   grabfirstletterofeachcategory;
   putThatIntoArray();
   Count amount of items in new array
   display that amount of lists
   apply links according to the foreach loop as maincategory.

}

基本上

<li>
   <h3>A</h3>
   <a href='/'>Almond</a>
   <a href='/'>Apple</a>
   <a href='/'>Artichoke</a>
</li>

<li>
   <h3>B</h3>
   <a href='/'>Bacon</a>
   <a href='/'>Banana</a>
   <a href='/'>Beans</a>
</li>

ETC

1 个答案:

答案 0 :(得分:1)

实际上,距您的伪代码还不远:

$categories = $this->mymodel->getAllMainCats();
$ordered = array();
foreach($categories as $cat){
 $first = strtoupper($cat[0]);
 $ordered[$first][] = $cat;
}

你应该有一个像:

这样的数组
array( A => array(  0 => Almond, 1 => Apple..),
       B => array(  0 => Banana...),

所以现在你循环:

<ul>
<?php foreach($ordered as $key => $value): ?>
<?php // outer loop over the keys, i.e. the letters: ?>
 <li>
   <h3><?php echo $key;?></h3>
   <ul>
   <?php foreach($value as $val):?>
   <?php // inner loop over the values, i.e. the elements:?>
    <li><a href='/'><?php echo $val;?></a></li>
   <?php endforeach;?>
  </ul>
 </li>
<?php endforeach;?>
</ul>

您可以在行动here

中看到它