Zend Framework:如何取消设置Zend_Db_Table_Rowset对象中的数据行

mar*_*kus 4 php arrays zend-framework zend-db-table

我想迭代存储在Zend_Db_Table_Rowset对象中的数据行,然后删除/取消设置某些行,如果它们不符合某些条件.

我可以使用toArray()来获取对象中的数据行,然后很容易取消我不需要的行.但由于我想保留我的对象以供进一步使用,我不想这样做.

当然,一种解决方案是调整我的查询以便仅检索我需要的内容,但在这种情况下这是不可能的.至少我不知道怎么做.

我尝试了以下哪些不起作用:

foreach ($rowset as $key => $row)
{
    if (!$condition == satisfied)
    {
        unset($rowset[$key]);
    }
}
Run Code Online (Sandbox Code Playgroud)

当然它不起作用,因为没有$ rowset [$ key] ...数据存储在子数组[_data:protected]中但未设置$ rowset [_data:protected] [$ key]没有工作要么.

也许我对行集对象(或一般对象的表示)的概念还不够成熟,无法理解我在做什么.任何澄清和提示都将受到欢迎!

[编辑] $ row-> delete不是一个选项,我不想删除数据库中的行!我不想先创建一个数组,如果我想,我只想做$ rowset-> toArray()[/ EDIT]

解决方案:我最终做了我认为我也无法做到的事情,这意味着我将所有内容集成到初始查询中.

Ond*_*lda 6

自定义rowset类的示例方法:

public function removeFromRowset($id) {
    foreach ($this->_rows as $i => $v) {
        if ($v->id == $id) { // found Row we want to remove
            unset($this->_rows[$i]); // delete both rowset
            unset($this->_data[$i]); // and original data
            break; // not necessary to iterate any more
        }
    }
    $this->_data = array_values($this->_data); // reindex both arrays (otherwise it breaks foreach etc.)
    $this->_rows = array_values($this->_rows);
    $this->_count = count($this->_data); // don't forget to update items count!
}
Run Code Online (Sandbox Code Playgroud)

它迭代你的Rowset,根据它的id找到Row(假设"id"是唯一标识符),然后从Rowset中删除它.

请注意,这不会删除数据库中的行,只是将其从Rowset中删除!