0

最近、スクリプトでページネーションを作成するために array_slice 関数を使用しています。

40 個の値を持つ配列があります (各値はスレッドです)

$thread_order_P = $this->forum_handler->orderThreads($forum_threads);

そして、1 ページに 15 スレッドだけを表示したいので、次のようにしました。

$cu_page = $_GET['page'];
$threads_per_page = 15;
$start_f_value = $cu_page-1;
$start_f_value = $start_f_value*$threads_per_page;
$end_f_value = $threads_per_page*$cu_page;
$thread_order = array_slice($thread_order_P, $start_f_value, $end_f_value);

さて、問題は、ページ 1 [エコー 15 スレッド] と 3 [エコー 10 スレッド] を表示しようとすると、完全に動作しますが、ページ 2 を表示しようとすると、15 ではなく 25 スレッドがエコーされます..

何か案は?

4

1 に答える 1

1

Barmar がコメントで指摘したように、 の 3 番目の引数array_slice()はスライスの長さであり、終了インデックスではありません。

array_slice()ドキュメントから:

length が指定され、正の場合、シーケンスには最大でその数の要素が含まれます。配列が長さより短い場合、使用可能な配列要素のみが存在します。length が指定され、負の場合、シーケンスは配列の末尾からその数の要素を停止します。省略した場合、シーケンスにはオフセットから配列の最後までのすべてが含まれます。

したがって、array_slice()ステートメントを次のように変更します。

$thread_order = array_slice($thread_order_P, $start_f_value, $threads_per_page);

デモ!

于 2013-11-03T21:16:10.030 に答える