Zend_Db fetchAll () возвращает значения как ключи, а не как ключ => значение - PullRequest
1 голос
/ 27 декабря 2011

Есть ли способ изменить функциональность по умолчанию в методе Zend_Db fetchall (), чтобы он не возвращал это:

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

, но это:

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

Ответы [ 3 ]

2 голосов
/ 17 марта 2012

Хотя ваш вопрос на самом деле ошибочен (замечено 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 голосов
/ 19 октября 2015

Помимо Питера, я бы добавил случай, когда строки сами по себе являются массивами, а не просто скалярами;результаты могут быть вложены в столько полей, сколько содержится в запросе.

Например, здесь с двумя уровнями вложенности соответственно на field1 и field2.

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

Как всегда, каждая строкасодержит все поля, но $ complex_results индексируется полем1, затем только полем 2.

0 голосов
/ 17 января 2012

Я ищу похожее решение, я пытаюсь загрузить поле, возвращаемое fetchAll ($ select), в качестве ключа массива. Не просматривая весь набор результатов.

Итак:

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

results[<my fieldname>]->dbfield2;
...