我有一个包含2500个元素的数组。。我想要一个简单的算法来得到以下内容。
如果输入是1,那么它应该返回前50个元素。如果输入是2,它应该返回51到第100个元素。如果输入是3,它应该返回101到第150个元素。
我对这个算法太困惑了,我的脑子里没有任何想法,有人请帮帮我。
注意:我正在为2500 url编码我自己的分页。。我只需要算法的想法。。未编码
<?php
$ar = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30];
function return_frame($arr, $multiplier, $frame_size=50, $preserve_keys = false) {
return array_slice($arr, ($multiplier - 1)*$frame_size, $frame_size, $preserve_keys);
}
print_r(return_frame($ar, 2, 15, false));
?>
Array
(
[0] => 16
[1] => 17
[2] => 18
[3] => 19
[4] => 20
[5] => 21
[6] => 22
[7] => 23
[8] => 24
[9] => 25
[10] => 26
[11] => 27
[12] => 28
[13] => 29
[14] => 30
)
看看:http://php.net/manual/en/function.array-slice.php
我认为您可以在sql代码上添加位置和范围,如下所示:
"select * from blabla order by post desc limit $position,$range"
右侧有0到2499的索引。
您想要$count为50。让我展示一下思考的过程。
因此,如果将1作为$paramter
,则希望$start
为0,$end
为49。
让我们看看:
1-$parameter
是$start right。并且CCD_ 5是$end。ok
对于2,您希望$start为50,$end为99;
以上内容在此不起作用。让我们玩$count
$parameter*count;
快结束了。。我们必须使用0索引。所以:
$end
将是$parameter*$count-1
。我们可以看到,对于1,2和3作为CCD_ 10也是如此。$start
将是($parameter-1)*$count
。只是在头部快速产生0,50100。正是我们想要的。
正如@cars10所建议的那样,我们不需要$end
。带有array_slice($arr,($parameter-1)*$count,$count);