是否可以限制數組中的成員數量,例如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