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

问题描述 投票:0回答:3

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

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

但是这个:

[100000055944231]
[100000089064543]
[100000145893011]
[100000160760965]
php zend-db fetchall
3个回答
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)


0
投票

我正在寻找类似的解决方案,我正在尝试加载 fetchAll($select) 返回的字段作为数组键..而不循环整个结果集。

所以:

$results = $this->db->fetchAll($select, <FIELDNAME_TO_MAKE_KEY_OF_RESULTS_ARRAY>);

results[<my fieldname>]->dbfield2;

0
投票

在 Pieter 的基础上,我会添加行本身是数组的情况,而不仅仅是标量;可以将结果嵌套到查询包含的多个字段中。

例如这里有两层嵌套,分别在 field1 和 field2 上。

$complex_results = array_map(function($row) { return array($row['field1'] => array($row['field2'] => $row)); }, $results);

一如既往,每行包含所有字段,但 $complex_results 由 field1 索引,然后仅由 field2 索引。

© www.soinside.com 2019 - 2024. All rights reserved.