LIMIT
是否可以像MySQL一样限制数组中的成员数量?例如,如果我有$array
成员x
,我只想返回前 50 个成员,我该怎么做?
我应该使用 and 的组合count()
,array_slice()
还是有更简单的方法?
使用array_slice应该可以解决问题。
array_slice($array, 0, 50); // same as offset 0 limit 50 in sql
使用 SPL(更好的内存占用):
// Using fixed array
$fixedArray = SplFixedArray::fromArray($array);
$fixedArray->setSize(min(50, count($array));
// Using iterator
$limitIterator = new LimitIterator(new ArrayIterator($array), 0, 50);
确保$array
只有 50 长:
array_splice($array, 50);
或者返回前 50 个:
$new_array = array_slice($array, 0, 50);
你期望它有多容易?;)
对于数组本身,没有办法限制其中的元素数量。
您可以使用循环实现自己的方法来获取数组的前 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);
;第四个参数保留关联数组中的键。