是否可以限制数组中的成员数量,例如MySQL中的LIMIT
?例如,如果我有$array
和x
成员,并且我只想返回其中的前50个,那么我该怎么做?在PHP中限制数组长度PHP
我是否应该使用count()
和array_slice()
的组合,还是有更简单的方法?
是否可以限制数组中的成员数量,例如MySQL中的LIMIT
?例如,如果我有$array
和x
成员,并且我只想返回其中的前50个,那么我该怎么做?在PHP中限制数组长度PHP
我是否应该使用count()
和array_slice()
的组合,还是有更简单的方法?
使用array_slice应该这样做。
array_slice($array, 0, 50); // same as offset 0 limit 50 in sql
是的,不要使用拼接,因为这会修改你的输入数组。 – 2012-07-27 14:51:39
谢谢 - 我错过了最后一个参数的文档,并假定我必须用'count()'做一些奇怪的事情,然后在'array_slice()'中使用它作为参数。 – Alfo 2012-07-27 14:53:59
确保$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);
;第四个参数保留关联数组中的键。
'array_slice'对于关联数组有一个'$ preserve_keys = false'第四个参数。 – complex857 2012-07-27 14:55:36
@ complex857良好的捕获;我只是查了一下方法并确认了(并且已经更新了我的答案以匹配)。谢谢=] – newfurniturey 2012-07-27 14:59:35
随着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_slice(),而不是array_splice();和count()应该不是必需的 – 2012-07-27 14:51:24
谢谢 - 更正'array_slice()'。 – Alfo 2012-07-27 15:06:21