PHP数组切片奇怪的行为

时间:2013-11-03 21:11:43

标签: php arrays

我最近一直在使用array_slice函数,以便在我的脚本中进行分页。

我有一个包含40个值的数组(每个值都是一个线程)

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

我想在页面中只显示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页[echos 15个主题]和3个[echos 10个主题]时,它完美地工作,但当我尝试显示第2页时,它回显25个线程而不是15个..

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

正如Barmar在评论中指出的那样,array_slice()的第三个参数是切片的长度,而不是结束索引。

来自array_slice()文档:

  

如果给出长度并且是正数,那么序列中将包含多个元素。如果数组短于长度,则仅存在可用的数组元素。如果给定长度并且为负,则序列将停止来自数组末尾的许多元素。如果省略,那么序列将包含从偏移到数组结束的所有内容。

因此,请将array_slice()语句更改为以下内容:

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

Demo!