注意:foreach构造中的未定义索引'itemid'

时间:2012-08-08 11:47:43

标签: php zend-framework multidimensional-array zend-db zend-db-table

我是PHP和Zend Framework的新手。我遇到了错误:

  

注意:未定义的索引:第58行的C:\ xampp \ htdocs \ blogshop \ application \ views \ scripts \ item \ tops.phtml中的itemid

我不明白为什么会出现这个错误。

public function topsAction() //tops action
{
    //$tops = new Application_Model_DbTable_Item();
    //$tops->getTops();
    $item = new Application_Model_DbTable_Item(); //create new Item object
    $this->view->item = $item->getTops();  //$this->view->item  is pass to index.phtml
}   

这是我的控制器代码。

public function getTops()
{
    $row = $this->fetchAll('itemtype = "Tops"'); //find Row based on 'Tops'
    if (!$row) { //if row can't be found
        throw new Exception("Could not find Tops!"); //Catch exception where itemid is not found
    }
    return $row->toArray();
}

这是我在模型中的getTops操作,用于获取数据库中“Tops”类别的行。

<?php foreach($this->item as $item) : ?>
    <?php echo $this->escape($this->item['itemid']);?> // This is where the error happens
    <img src="<?php echo $this->escape($item->image);?>" width="82" height="100">
    <?php echo $this->escape($this->item['itemname']);?>
    <?php echo $this->escape($this->item['description']);?>
    <?php echo $this->escape($this->item['itemtype']);?>
<?php endforeach; ?>

这是我的代码,用于显示我在数据库中的所有行。

1 个答案:

答案 0 :(得分:2)

itemid数组中没有名为$this->item的索引,这就是您收到错误的原因。

此外,您的代码似乎有点不对劲:

<?php foreach($this->item as $item) : ?>
    <?php echo $this->escape($this->item['itemid']);?>
    <img src="<?php echo $this->escape($item->image);?>" width="82" height="100">
    <?php echo $this->escape($this->item['itemname']);?>
    <?php echo $this->escape($this->item['description']);?>
    <?php echo $this->escape($this->item['itemtype']);?>
<?php endforeach; ?>

$this->item语句中的每个foreach都应替换为$item,以便迭代生效。因此它将是$item['itemid']$item['itemname']等。您缺少更深入的数组,使迭代foreach无用。

我猜$this->item看起来像这样:

array (
  1 => 
  array (
    'itemid' => 1,
    'itemname' => 'foobar',
  ),
  2 => 
  array (
    'itemid' => 2,
    'itemname' => 'bazqux',
  ),
)

这就是$this->item['itemid']没有返回任何内容的原因,因为它不存在。 $this->item[1]['itemid']然而确实foreach周期帮助您做的是它遍历(迭代)整个$this->item数组,其中每个值在循环内表示为$item。在第一次运行中,$item$this->item[1],在第二次运行中,$item$this->item[2],依此类推,等等。

因此,在$this->item构造内将$item更改为foreach