2011-08-30 2 views
0

J'ai une fonction qui obtient des utilisateurs à partir d'une base de données MySQL, les lignes de résultats peuvent être 1 ou plusieurs lignes.Comment dissocier un élément dans un tableau multidimensionnel?

Ce qui me contrarie est que quand je ne cherche à obtenir 1 résultat de la db, il me renvoie un tableau multi-dimensionnel comme ceci:

$result = array([0]=>array('foo'=>'bar')) 

Et me fait écrire du code méchant comme:

$e = $result[0]['foo'] // instead of $result['foo'] 

Je suis assez sûr que beaucoup de gens sont venus dans cette situation, je pensais que ce serait cool si je peux vérifier s'il n'y a qu'une seule ligne retournée, puis ajouter à $result une version dissociées de celui-ci pour que je puisse utiliser quand je cherche seulement 1 rangée. donc ce serait comme ceci:

$result = array(
[0] => array('foo'=>'bar'), // will keep the multi-dimentional version 
'foo' => 'bar' // and append the ungrouped version of $result here 
); 

Comment faire?

Répondre

3
if (count($result) === 1) 
{ 
    $result = $result[0]; 
} 
+0

+1 assez propre et clair, je ne sais pas pourquoi il semble méchant quand on utilise '$ result [0]' –

0

Cela me semble que quelque chose est un peu perdu dans votre API.

Si vous avez une fonction qui peut revenir à 1 n résultats à partir d'une base de données, il doit être accessible via des accesseurs de tableau (tels que $result[0]['foo']). Sinon, vous pouvez stocker le résultat dans un var temp, comme:

$o = $result[0]; 
print_r($o['foo']); 

Le problème de faire ce que vous demandez est que vous munging vos données de retour sur une base de cas particulier, qui est non seulement déroutant à ceux qui peuvent utiliser votre code, mais il est très enclin, laissant potentiellement un utilisateur se demandant pourquoi ils ne peuvent pas accéder au 0e élément de $result.

Les fonctions qui retournent un seul élément doivent renvoyer un seul élément. Les fonctions qui retournent plusieurs éléments doivent renvoyer plusieurs éléments (et ne pas avoir leurs données modifiées dans des cas particuliers).

Questions connexes