我有包含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对象答案 0 :(得分:1)
你不能一次删除所有这些,你必须迭代(使用foreach或与next()结合使用)来删除它们。
在冲浪的过程中,我发现了以下您可能感兴趣的链接。这解释了在PHP中以很好的方式使用实现迭代器模式。 &GT;&GT; http://www.fluffycat.com/PHP-Design-Patterns/Iterator/