php iterator类是如何工作的? (通过zend表行集迭代)

时间:2011-07-15 05:11:14

标签: php zend-framework

我有包含100条记录的对象。我想迭代它并删除对象中的所有数据。

我如何在PHP迭代器类中执行此操作?

(对象是ZEND表行集对象)

(这里删除意味着我们只是将数据库中的delete_flag设置为1.数据不会从数据库中物理删除。)

例如:

$zendTableRowSetObject->list[0]->delete_flag = 1
$zendTableRowSetObject->list[2]->delete_flag = 1
$zendTableRowSetObject->list[3]->delete_flag = 1

$zendTableRowSetObject->save(); 

- > save()是Zend函数,这将更新用于调用此方法的对象。

(除此之外的任何其他方法http://php.net/manual/en/language.oop5.iterations.php

(不使用foreach循环有什么方法可以做到吗?)

给我一​​些例子。

这是我的迭代器类

class PersonListIter implements Iterator
{
     protected $_PersonList;

    /**
     * Index of current entries
     * It's used for iterator
     * @var integer
     */
    protected $_entryIndex = 0;

    /**
     * Entries data sets
     * @var array
     */
    protected $_entries;

    /*
     * Initialization of data. 
     * 
     * @params  Zend_Db_Table_Rowset    $list   Row Object
     * @return  null
     */    
    public function __construct ( $list )
    {
        $this->_PersonList = $list;
        $this->_entryIndex = 0;
        $this->_entries = $list->getCount();
    }

    /*
     * Iterator interface method to rewind index
     * @return  null
     */     
    public function rewind()
    {
        $this->_entryIndex = 0;
    }

    /*
     * Iterator interface method to return Current entry
     * @return  Zend_Db_Table_Row   Current Entry
     */         
    public function current()
    {
        return $this->_PersonList->getElement($this->_entryIndex);
    }

    /*
     * Iterator interface method to return index of current entry
     * @return  int     Current Entry Index
     */     
    public function key()
    {
        return $this->_entryIndex;
    }

    /*
     * Iterator interface method to set the next index
     * @return  null
     */      
    public function next()
    {
        $this->_entryIndex += 1;
    }

    /*
     * Iterator interface method to validate the current index
     * @return  enum    0/1 
     */      
    public function valid()
    {
        return (0 <= $this->_entryIndex && $this->_entryIndex < $this->entries)?1:0;
    }

} // class PersonListIter

$ zendTableRowSetObject是迭代器类

中的PersonList对象

1 个答案:

答案 0 :(得分:1)

你不能一次删除所有这些,你必须迭代(使用foreach或与next()结合使用)来删除它们。

在冲浪的过程中,我发现了以下您可能感兴趣的链接。这解释了在PHP中以很好的方式使用实现迭代器模式。 &GT;&GT; http://www.fluffycat.com/PHP-Design-Patterns/Iterator/