0

我正在尝试将子类别与其各自的父类别相匹配。现在我只是在视图的主要类别(书籍、衣服等)中进行硬编码,并具有获取所有子类别的功能,然后在视图中我可以创建一个 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>

但是我在创建每个列表项的行上出现错误,说'未定义的索引:'subcat_name'。该列表项中的 subcat_id 也是如此。有人可以告诉我有什么问题吗?谢谢

4

2 回答 2

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 循环不迭代数组

于 2013-03-18T18:03:49.830 回答
1

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

$subcategories[cat_id][subcat_id]

但访问它作为

$subcategories['subcat_id/name']

这在两个方面是错误的:

  1. 您缺少 cat_id。你需要类似 $subcategories[1][subcat_id]
  2. 您没有定义字符串键。$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; ?>

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

于 2013-03-18T18:33:09.430 回答