2011-06-23 5 views
-1

Je développe quelque chose comme un cms simple et spécifique.php optimisation du code pour foreach

J'utilise une classe db qui génère un tableau suite à la requête, mais ce tableau varie en fonction de mysql_num_rows.

S'il n'y a qu'un seul résultat, il sort un tableau simple, sinon il sort un tableau imbriqué. Donc, je dois vérifier la structure de la matrice pour décider de faire une boucle avec foreach, ou simplement imprimer les résultats.

avec mysql_fetch_assoc simple, nous pouvons utiliser while(), puis il n'y a pas de problème avec le nombre de lignes. mais avec un tableau, nous devons le vérifier.

Jusqu'à maintenant, tout est OK.

Le problème est que le code sera répété pour les deux conditions. avec un léger changement dans le nom du tableau.

Le nom du tableau est $ res, si un seul résultat, il sera $res['anything here'], sinon, parce que nous devons utiliser foreach($res as $row), le tableau sera $row['anything here']. Donc le code a l'air laid et très grand. S'il vous plaît prendre un peu là-bas ici: http://mohamedkadri.com/code.html et dites-moi comment le rendre plus simple et plus petit.

+2

trop verbeux ..-. – dynamic

+1

"J'utilise une classe db qui génère un tableau suite à la requête, mais ce tableau varie en fonction de mysql_num_rows." Cela ressemble à une idée terrible. Changer ce comportement? – phant0m

+0

ne pas utiliser cette classe – k102

Répondre

6

La solution est simple:

Changer votre couche de DB de sorte que vous pouvez le forcer à retourner une liste de lignes, même s'il y a juste une seule ligne. C'est la seule solution appropriée.

+0

^^ Je suis avec genious – Phliplip

3

Ce n'est pas une bonne approche. Je suggère de changer votre classe de DB afin que vous ayez une méthode différente à appeler selon si la requête retournera une ligne ou plusieurs. Par exemple. dans les classes de base de données Zend Framework, il y a fetchRow et fetchAll. Cela vous permettra de traiter plus facilement les données que vous récupérez.

Une autre option pourrait être de toujours retourner un tableau imbriqué même s'il n'y avait qu'une seule ligne. De cette façon, le code pour traiter les données sera toujours le même.

+1

Une fonction séparée pour aller chercher une seule ligne ou 'null' s'il n'y a pas de lignes est généralement une bonne chose si vous savez que vous n'en aurez pas plus d'une ligne jamais ('WHERE id = ...'). Cependant, une fonction pseudo-intelligente faisant cela ou retournant une liste de lignes est une idée horrible. – ThiefMaster

+0

OK J'ai une nouvelle question qui contient le code principal qui qénère ce tableau, aidez-moi s'il vous plaît à le modifier pour le forcer à produire un tableau imbriqué. Merci. http://stackoverflow.com/questions/6454420/force-nested-array – medk