是否可以像MySQL中的LIMIT
那样限制数组中的成员数量?例如,如果我有$array
和x
成员,并且我只想返回其中的前50个,我该如何做到这一点?
我应该使用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;
}
EDIT:此函数提供与使用array_slice($array, $offset, $limit, true);
相同的结果;第四个参数保留关联数组中的关键点。