2013-12-21 81 views
1

讓代碼如下導致超過27k ids,所以我想分頁結果爲每頁100個IDS結果。foreach數組結果分頁

function subtree($id, $parents) 
{ 
    echo ' <tr><td> <b>Client No.:</b> </td><td> '; 
    echo $id; 
    echo ' </td></tr> '; 
    if (isset($parents[$id])) { 
     foreach ($parents[$id] as $child) { 
      subtree($child, $parents); 
     } 
    } 
} 

$家長是主SQL查詢的數組:

$ id是父ID

當我調用該函數的結果是所有在同一頁上,我想現在要做的是將這些結果分頁到每頁100個。

+0

問題是什麼? – PeeHaa

+0

@PeeHaa,結果在一個頁面中非常龐大,因此需要將結果分頁到每頁100個。 – user3117183

回答

0

試試這個

$count = 0; 
function subtree($id, $parents) 
{ 
    echo ' <tr><td> <b>Client No.:</b> </td><td> '; 
    echo $id; 
    echo ' </td></tr> '; 
    if (isset($parents[$id])) 
     foreach ($parents[$id] as $child) { 
      if ($count === 100) { 
       break; 
      } 
      subtree($child, $parents); 
      $count++; 
     } 
} 

這將幫助你在顯示每頁100個結果。現在您可以創建鏈接以顯示下一頁中的下100個記錄

+0

在代碼的末尾有一個額外的},但是仍然沒有分頁。 – user3117183

0

改進您的數據庫例程。在嘗試對其進行分頁之前,您可能需要使用臨時表來幫助將多維數據平滑並標準化。您將需要跟蹤您正在使用的頁面以及每個頁面有多大,

如果您使用的是mysql,請使用自動生成的id列指定開始的位置AND id > 300然後添加LIMIT 100以說明您的位置結束。 在oracle上它會是AND RowNum between 300 and 400

您的其他選擇是使用遞歸函數來構建id的平面列表並將其存儲在會話中,然後通過它運行分頁例程。

另一種選擇是將recusion重寫爲堆棧和循環結構,這樣您就可以知道自己已經走了多遠,爲此頁指定了一個起始點,並通過它運行直到你點擊啓動計數器,發出數據直到你點擊結束標記,然後返回。

當然,最糟糕的選擇是簡單地使用全局變量來指示您嘗試打印出多少東西,並在echo語句周圍放置一個if ($count >= $start && $count <= $end)。不要這樣做。但是這樣做很簡單,可能工作時沒有考慮到它非常困難並且效率非常低。