0

我有一个包含 2500 个元素的数组。我想要简单的算法来获得以下内容。

如果输入是 1 ,那么它应该返回第一个 50 个元素。如果输入是 2,它应该返回 51 到第 100 个元素。如果输入是 3,它应该返回 101 到第 150 个元素。

我对这个算法太困惑了,我的头脑没有给出任何想法,请有人帮助我。

注意:我正在为 2500 url 编写自己的分页代码。我只需要算法思想。而不是编码

4

3 回答 3

0

你有从 0 到 2499 的索引。

你想要一个$ count 50。让我告诉你思考的过程。

所以如果你得到1作为$paramter你想$start成为 0 和$end49。

让我们来看看:

1-$parameter是 $start 正确的。并且50-$paramter是 $end 。好的

对于 2,您希望 $start 为 50, $end 为 99;

以上在这里不起作用。让我们玩$count

$parameter*count;几乎是 $end .. 我们必须为0 indexing玩。所以:

$end$parameter*$count-1。我们可以看到这对于 1,2 和 3 都是正确的$parameters$start($parameter-1)*$count。很快就在头上给出了0,50,100。正是我们想要的。

正如@cars10 建议的那样,我们不需要$end. 和array_slice($arr,($parameter-1)*$count,$count);

于 2013-08-29T17:31:09.580 回答
0
<?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

于 2013-08-29T17:26:33.073 回答
0

我认为你可以像这样在你的 sql 代码上添加位置和范围:

"select * from blabla order by post desc limit $position,$range"
于 2013-08-29T17:19:32.320 回答