Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend Framework:如何在Zend_Db_Table_行集对象中取消设置数据行_Php_Arrays_Zend Framework_Zend Db Table - Fatal编程技术网

Php Zend Framework:如何在Zend_Db_Table_行集对象中取消设置数据行

Php Zend Framework:如何在Zend_Db_Table_行集对象中取消设置数据行,php,arrays,zend-framework,zend-db-table,Php,Arrays,Zend Framework,Zend Db Table,我希望迭代存储在Zend_Db_Table_Rowset对象中的数据行,然后删除/取消设置某些行(如果它们不满足某些条件) 我可以使用toArray()只从对象中获取数据行,然后很容易取消设置我不需要的行。但是,因为我想保留我的对象以供进一步使用,所以我不想这样做 当然,一种解决方案是调整我的查询以便只检索我需要的内容,但在这种情况下这是不可能的。至少我不知道怎么做 我尝试了以下不起作用的方法: foreach ($rowset as $key => $row) { if (!$c

我希望迭代存储在Zend_Db_Table_Rowset对象中的数据行,然后删除/取消设置某些行(如果它们不满足某些条件)

我可以使用toArray()只从对象中获取数据行,然后很容易取消设置我不需要的行。但是,因为我想保留我的对象以供进一步使用,所以我不想这样做

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

我尝试了以下不起作用的方法:

foreach ($rowset as $key => $row)
{
    if (!$condition == satisfied)
    {
        unset($rowset[$key]);
    }
}
当然,它不起作用,因为没有$rowset[$key]。。。数据存储在子数组[\u data:protected]中,但unset$rowset[\u data:protected][$key]也不起作用

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

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


解决方案:我最终做了我认为自己做不到的事情,这意味着我将所有内容都集成到了初始查询中。

我不知道有什么方法可以做到这一点。您可以先创建一个数组,然后修改该数组

$rows = array();
foreach($rowset as $row)
{
     $rows[$row->id] = $row;
}

foreach ($rows as $key => $row)
{
     if(!$condition == satisfied)
     {
         unset($rows[$key]);
     }
}

这不是最有效的方法,但它确实有效。

您也可以对单个行对象使用delete()方法

foreach ($rowset as $row)
{
    if (!$condition == satisfied)
    {
       $row->delete();
    }
}
你可以用一个

然后,此类将有权访问内部存储的受保护的$\u行,您可以添加一个公共方法来应用筛选的示例方法:

它遍历您的行集,根据其id(假设“id”是唯一标识符)查找行,然后将其从行集中删除


请注意,这不会从数据库中删除该行,它只是将其从行集中删除

删除是破坏性的。该行将从表中删除。可能我不清楚,但我不想从表中删除该行,我只想将其从对象中删除!!请接受我的道歉,因为我不明白你想做什么。正如dcarun建议的,并且smack0007确认的那样,使用自定义行集将是最好的选择。不,我需要对象保持健康。使用$rowset->toArray()$rowset->toArray()可以轻松创建数组,但不会生成行对象。它以数组的形式返回整个行集。这就是我没有使用它的原因。上面的自定义行集类可能是你最好的选择。我最终做了我认为自己做不到的事情,这意味着我将所有内容都集成到了查询中。但是,感谢您提供的自定义行集输入,我在某一点上肯定需要它。
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!
}