有没有办法更改 Zend_Db fetchall() 方法中的默认功能,以便它不返回此:
[0] => 100000055944231
[1] => 100000089064543
[2] => 100000145893011
[3] => 100000160760965
但是这个:
[100000055944231]
[100000089064543]
[100000145893011]
[100000160760965]
虽然你的问题实际上是有缺陷的(BartekR指出),但我想你正在尝试接收一个简单的数组,而不是多维数组。
你可以这样做:
$results = $this->db->fetchAll($select);
$values = array_map(function($row) { return $row['column']; }, $results);
这将变成:
array(
array('column' => 'test'),
array('column' => 'test2'),
array('column' => 'test3'),
);
进入
array(
'test',
'test2',
'test3'
);
(注意;我的示例仅适用于 PHP5.3+,如果您使用 PHP5.2,您可以定义该函数并通过其名称与 array_map 一起使用它(例如
array_map('methodName', $results)
)
我正在寻找类似的解决方案,我正在尝试加载 fetchAll($select) 返回的字段作为数组键..而不循环整个结果集。
所以:
$results = $this->db->fetchAll($select, <FIELDNAME_TO_MAKE_KEY_OF_RESULTS_ARRAY>);
results[<my fieldname>]->dbfield2;
在 Pieter 的基础上,我会添加行本身是数组的情况,而不仅仅是标量;可以将结果嵌套到查询包含的多个字段中。
例如这里有两层嵌套,分别在 field1 和 field2 上。
$complex_results = array_map(function($row) { return array($row['field1'] => array($row['field2'] => $row)); }, $results);
一如既往,每行包含所有字段,但 $complex_results 由 field1 索引,然后仅由 field2 索引。