2011-06-23 13 views
-1

私はシンプルで目的別のCMSのようなものを開発しています。foreachのPHP最適化コード

私はクエリから結果として配列を出力するdbクラスを使用していますが、この配列はmysql_num_rowsによって構造が異なります。

結果が1つだけの場合、単純な配列が出力されます。それ以外の場合は、ネストされた配列が出力されます。

したがって、配列の構造を調べて、foreachでループを実行するか、結果を出力するかを決定する必要があります。

単純なmysql_fetch_assocではwhile()を使用でき、行数に問題はありません。アレイを確認する必要があります。

これまですべてがOKです。

問題は、コードが2つの条件に対して繰り返されることです。配列名に若干の変更があります。

配列名は$ resです。結果が1つの場合は$res['anything here']、そうでない場合はforeach($res as $row)を使用する必要があるため、配列は$row['anything here']になります。

コードが醜くて非常に大きく見えます。ここでそれを愚かにしてください:http://mohamedkadri.com/code.htmlと私にそれをより簡単で小さくする方法を教えてください。

+2

あまりにも冗長です。 – dynamic

+1

"クエリから結果として配列を出力するdbクラスを使用していますが、この配列はmysql_num_rowsに応じて構造が異なります。"ひどい考えのように聞こえる。その動作を変更しますか? – phant0m

+0

このクラスを使用しないでください – k102

答えて

6

解決策は単純です:あなたは1つだけの行があります場合でも、行のリストを返すために、それを強制することができるように

があなたのDB層を変更し

。それが唯一の適切な解決策です。

+0

^^私は素人です – Phliplip

3

これは大きなアプローチではありません。あなたのDBクラスを変更して、クエリが1行または複数行を返すかどうかによって呼び出す方法が異なるようにすることをお勧めします。例えば。 Zend FrameworkデータベースクラスにはfetchRowfetchAllがあります。これにより、取得したデータをより簡単に処理できます。

もう1つのオプションは、行が1つしかない場合でも常にネストされた配列を返すことです。そうすれば、データを処理するコードは常に同じになります。

+1

1行だけをフェッチする別の関数、または0行がある場合は 'null'を取る別の関数は、2つ以上取得しないことがわかっているのが普通です( 'WHERE id = ...')これまでに行がありました。しかし、これを行うか、行のリストを返す擬似スマート関数は恐ろしい考えです。 – ThiefMaster

+0

OKこの配列をqenerateするメインコードを含む新しい質問があります。ネストされた配列を出力するように修正してください。ありがとう。 http://stackoverflow.com/questions/6454420/force-nested-array – medk