输出二维数组 - CodeIgniter

时间:2013-03-18 17:50:50

标签: arrays codeigniter multidimensional-array

我正在尝试将子类别与其各自的父类别进行匹配。现在我只是在视图(书籍,衣服等)的主要类别中硬编码并且具有获取所有子类别的功能,然后在视图中我可以创建一个while循环以匹配每个子类别与其主要类别。

我已经设法将我想要的数据放入一个数组中,现在看起来像这样:

  array
  1 => 
    array 
      1 => string 'Medicine'
      2 => string 'Fairy tales' 
      3 => string 'Novels' 
    2 => 
    array
      44 => string 'Men's Clothing'
      45 => string 'Men's Accessories'
      49 => string 'Women's Swimwear' 
      50 => string 'Boys' 
      51 => string 'Girls' 
  3 => 
    array
      52 => string 'Perfume Sprays'
      53 => string 'Roll ons'
      54 => string 'Deodorants'
      64 => string 'Miscellaneous'

其中1,2,3是主类别ID,而内部数组对应于subcat_id => subcat_name。

我在我的模型中通过以下内容得到了这个数组:

function getsub()
{
    $this->db->select('sub_id,sub_name,cat_id');
    $q = $this->db->get('subcategories');

    $subcats = array();

    foreach($q->result() as $row)
    {
        $subcats[$row->cat_id][$row->sub_id] = $row->sub_name;
    }

    return $subcats;
}

然后在我看来,在我所拥有的任何类别下,我都会创建一个while循环来显示与cat_id匹配的所有子类别:

<ul class="dropdown-menu">
<?php while($subcats['cat_id'] == 1)?>

<?php{?>

  <li><a href="main/sub_prod/<?php echo $subcats['sub_id'];?>">
<?php echo $subcats['sub_name'];?></a></li>

<?php}?>

</ul>

但是我在每个列表项的行上都出错了,说'undefined index:'subcat_name'。对于该列表项中的subcat_id也是如此。有人能告诉我什么是错的吗?谢谢

2 个答案:

答案 0 :(得分:2)

试试这个:

    <ul class="dropdown-menu">
<?php $i=0; 
 while($subcategories[$i]['cat_id'] == 1){?>

  <li><a href="customer/subcat_products/<?php echo $subcategories[$i]['subcat_id'];?>">
<?php echo $subcategories[$i]['subcat_name'];?></a></li>

<?php $i++;
 }?>

</ul>

我添加了一个计数器,$ i变量。 while循环不迭代数组

答案 1 :(得分:1)

它与您尝试访问数组元素的方式有关。您将其指定为

$subcategories[cat_id][subcat_id]

但是以

的形式访问它
$subcategories['subcat_id/name']

这有两个方面是错误的:

  1. 你错过了cat_id。你需要像$ subcategories [1] [subcat_id]
  2. 这样的东西
  3. 您没有定义字符串键。 $ subcategories [1] ['subcat_id']不存在。现在,如果你有一个变量$ subcat_id,那么$ subcategories [1] [$ subcat_id]会在下一行返回你要查找的subcat_name,而不是subcat_id ...

你引入的另一个问题是你有一个无限循环。修复此问题的一个好方法是使用foreach循环,就像模型中的循环一样。

<?php foreach ($subcategories as $subcategory): ?>
<ul class="dropdown-menu">

  <?php foreach ($subcategory as $subcat_id => $subcat_name):
  <li><a href="customer/subcat_products/<?php echo $subcat_id; ?>">
  <?php echo $subcat_name; ?></a></li>
  <?php endforeach; ?>

</ul>
<?php endforeach; ?>

这将遍历所有类别,打印出一个无序列表,每个子类别都作为列表项。