2011-06-23 78 views
-1

我正在開發一些類似於簡單和特定目的的cms。PHP優化foreach的代碼

我正在使用一個數據庫類,作爲查詢結果輸出數組,但此數組結構根據mysql_num_rows而不同。

如果只有一個結果,它將輸出一個簡單的數組,否則它會輸出一個嵌套數組。

因此,我必須檢查數組的結構以決定是否使用foreach執行循環,或只是打印結果。

用簡單的mysql_fetch_assoc我們可以使用while()然後沒有問題的行數。但是對於一個數組我們必須檢查它。

直到現在一切正常。

問題是代碼將會針對這兩個條件重複。數組名稱稍有變化。

數組名稱爲$ res,如果一個結果爲$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

解決方法很簡單:

更改數據庫層,所以你可以迫使它返回行的名單,即使有一個單行。這是唯一適當的解決方案。

+0

^^我與genotic – Phliplip

3

這不是一個好方法。我建議改變你的數據庫類,讓你有一個不同的方法來調用,取決於查詢是否會返回一行或多個。例如。在Zend Framework數據庫類中有fetchRowfetchAll。這將使你更容易處理你回來的數據。

另一個選擇可能是總是返回一個嵌套數組,即使只有一行。這樣處理數據的代碼將始終是相同的。

+1

如果你知道你不會得到一個以上的行,那麼一個單獨的函數只讀取一行或'null'通常是一件好事有史以來('WHERE id = ...')。但是,執行此操作或返回行列表的僞智能函數是一個可怕的想法。 – ThiefMaster

+0

好吧,我有一個新的問題,包含確定這個數組的主要代碼,請幫我修改它,強制它輸出一個嵌套數組。謝謝。 http://stackoverflow.com/questions/6454420/force-nested-array – medk