2013-12-21 5 views
1

У вас есть код ниже, который приводит к более чем 27 тыс. Идентификаторов, поэтому я хотел бы сделать paginate result результатом 100 IDS на странице.foreach array result pagination

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

, когда я вызвать функцию в результате все на той же странице, что я хотел бы теперь делать это с разбивкой по страницам на 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, используйте столбец с автогенератором, чтобы указать, где вы начинаете AND id > 300, затем добавьте LIMIT 100, чтобы сказать, где вы конец. На оракуле будет AND RowNum between 300 and 400.

Ваш другой вариант использует вашу рекурсивную функцию для построения плоского списка идентификаторов и сохранения его в сеансе, а затем запустите подпрограмм pagination.

Ваш другой вариант - переписать рекуррент в структуру стека и цикла, чтобы вы знали, как далеко вы прошли, когда вы проходите через него, указав начальную точку для этой страницы, проходя через нее пока вы не нажмете на стартовый счетчик, испустите данные, пока не нажмете маркер конца и не вернетесь.

Худший вариант, конечно, состоял бы в том, чтобы просто использовать глобалы, чтобы указать, сколько вещей вы пытались распечатать, и поместите if ($count >= $start && $count <= $end) в операторы echo. Не делай этого. но было бы очень просто сделать и, вероятно, работать, не задумываясь об этом очень тяжело и быть ужасно неэффективным.