2011-12-27 3 views
1

Est-il possible de modifier la fonctionnalité par défaut dans la méthode Zend_Db fetchall(), de sorte qu'il ne retourne pas:Zend_Db fetchAll() pour renvoyer des valeurs en tant que touches, et non comme key => Valeur

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

mais ceci:

[100000055944231] 
[100000089064543] 
[100000145893011] 
[100000160760965] 
+0

Mais n'est-ce pas la même chose? De quoi avez-vous exactement besoin? Série de cordes? fetchAll retournera toujours un tableau - vous pouvez définir à quoi ressemblera ce tableau, mais ce sera toujours un tableau – BartekR

Répondre

2

Bien que votre question est en fait erronée (noté BartekR), je suppose que vous essayez de recevoir un simple tableau, au lieu d'un multidimensionnel.

Vous pouvez faire:

$results = $this->db->fetchAll($select); 
$values = array_map(function($row) { return $row['column']; }, $results); 

Cela tournera:

array(
    array('column' => 'test'), 
    array('column' => 'test2'), 
    array('column' => 'test3'), 
); 

dans

array(
    'test', 
    'test2', 
    'test3' 
); 

(notez, mon exemple ne fonctionne que dans PHP5.3 +, si vous re travailler avec PHP5.2, vous pouvez définir la fonction et l'utiliser par son nom avec array_map (eg array_map('methodName', $results))

0

Je suis à la recherche d'une solution similaire, je suis en train de charger un champ retourné par la fetchAll (sélectionnez $) comme la clé du tableau .. Sans boucle à travers l'ensemble de résultats.

Alors:

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

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

En plus de Pieter, j'ajouterais le cas où les lignes sont elles-mêmes des tableaux, et pas seulement des scalaires; il est possible d'imbriquer les résultats dans autant de champs que la requête contient.

par exemple. Ici avec deux niveaux d'imbrication, respectivement sur field1 et field2.

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

Comme toujours, chaque ligne contient tous les champs, mais $ complex_results est indexé par champ1, puis field2 seulement.

Questions connexes