有没有办法在Zend_Db fetchall()方法中更改默认功能,以便它不会返回:
[0] => 100000055944231
[1] => 100000089064543
[2] => 100000145893011
[3] => 100000160760965
但是这个:
[100000055944231]
[100000089064543]
[100000145893011]
[100000160760965]
答案 0 :(得分:2)
虽然你的问题确实存在缺陷(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)
)
答案 1 :(得分:0)
我正在寻找类似的解决方案,我正在尝试加载fetchAll($ select)返回的字段作为数组键。不循环遍历整个结果集。
所以:
$results = $this->db->fetchAll($select, <FIELDNAME_TO_MAKE_KEY_OF_RESULTS_ARRAY>);
results[<my fieldname>]->dbfield2;
答案 2 :(得分:0)
除了Pieter之外,我还要添加行本身是数组的情况,而不仅仅是标量;可以将结果嵌套到查询包含的多个字段中。
e.g。这里有两个嵌套级别,分别在field1和field2上。
$complex_results = array_map(function($row) { return array($row['field1'] => array($row['field2'] => $row)); }, $results);
与往常一样,每一行都包含所有字段,但 $ complex_results 由field1索引,然后仅包含field2。