Если я правильно помню, Zend_Db_Table_Rowset_Abstract
просто передается массив (или что-то, что действует как единое целое), а затем, когда вы проходите через него, он создает Zend_Db_Table_Row_Abstract
объекты.
Наилучшим способом может быть однократный цикл и сохранение строк в массиве, проиндексированном первичным ключом. Таким образом, вы делаете один цикл, а затем можете получить доступ к любой строке с помощью клавиши.
Обновление : Просто взглянул на источник, вот данные, которые (в конечном итоге) передаются объекту набора строк:
$stmt = $this->_db->query($select);
$data = $stmt->fetchAll(Zend_Db::FETCH_ASSOC);
return $data;
Когда вы выполняете итерацию по набору строк в первый раз, этот исходный массив используется для создания объектов строк. До этого момента данные не просматривались, поэтому вы не делаете то, что уже сделано.
Таким образом, вы должны сделать что-то подобное, чтобы отобразить строки в первичный ключ (некоторое время я не использовал Zend_Db_*
, обработайте этот псевдокод):
$rows = array();
foreach($rowset as $row){
//you could pull the primary key from Zend_Db_Table
$rows[$row->id] = $row;
}
//now you can lookup by primary key
$rows[55]->name;
Конечно, вы можете расширить класс абстрактного набора строк и сделать это внутренне, если хотите.