Zend_Db fetchAll()将值作为键返回,而不是key =>值

时间:2011-12-27 18:54:37

标签: zend-db fetchall

有没有办法在Zend_Db fetchall()方法中更改默认功能,以便它不会返回:

[0] => 100000055944231
[1] => 100000089064543
[2] => 100000145893011
[3] => 100000160760965

但是这个:

[100000055944231]
[100000089064543]
[100000145893011]
[100000160760965]

3 个答案:

答案 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。