11

LIMIT是否可以像MySQL一样限制数组中的成员数量?例如,如果我有$array成员x,我只想返回前 50 个成员,我该怎么做?

我应该使用 and 的组合count()array_slice()还是有更简单的方法?

4

4 回答 4

29

使用array_slice应该可以解决问题。

array_slice($array, 0, 50); // same as offset 0 limit 50 in sql
于 2012-07-27T14:50:35.420 回答
6

使用 SPL(更好的内存占用):

// Using fixed array
$fixedArray = SplFixedArray::fromArray($array);
$fixedArray->setSize(min(50, count($array));

// Using iterator
$limitIterator = new LimitIterator(new ArrayIterator($array), 0, 50);
于 2012-07-27T14:56:19.413 回答
1

确保$array只有 50 长:

array_splice($array, 50);

或者返回前 50 个:

$new_array = array_slice($array, 0, 50);

你期望它有多容易?;)

于 2012-07-27T14:52:00.743 回答
0

对于数组本身,没有办法限制其中的元素数量。

您可以使用循环实现自己的方法来获取数组的前 50 个元素(甚至是某个偏移后的前 50 个元素)(我建议使用循环,因为使用关联数组array_splice()将不起作用):

function limit($array, $limit, $offset = 0) {
    $return = array();
    $end = ($limit + $offset);
    $count = 0;
    foreach ($array as $key => $val) {
        if ($count++ > $offset) {
            $return[$key] = $val;
        }
        if ($count == $end) break;
    }
    return $return;
}

编辑:此函数提供与使用相同的结果array_slice($array, $offset, $limit, true);;第四个参数保留关联数组中的键。

于 2012-07-27T14:52:21.347 回答