2012-07-27 871 views
8

是否可以限制數組中的成員數量,例如MySQL中的LIMIT?例如,如果我有$arrayx成員,並且我只想返回其中的前50個,那麼我該怎麼做?在PHP中限制數組長度PHP

我是否應該使用count()array_slice()的組合,還是有更簡單的方法?

+0

我假定你的意思array_slice(),而不是array_splice();和count()應該不是必需的 – 2012-07-27 14:51:24

+0

謝謝 - 更正'array_slice()'。 – Alfo 2012-07-27 15:06:21

回答

22

使用array_slice應該這樣做。

array_slice($array, 0, 50); // same as offset 0 limit 50 in sql 
+0

是的,不要使用拼接,因爲這會修改你的輸入數組。 – 2012-07-27 14:51:39

+0

謝謝 - 我錯過了最後一個參數的文檔,並假定我必須用'count()'做一些奇怪的事情,然後在'array_slice()'中使用它作爲參數。 – Alfo 2012-07-27 14:53:59

0

確保$array只有50長:

array_splice($array, 50); 

還是回到最初的50:

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

如何容易,你希望它是什麼? ;)

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; 
} 

EDIT:該函數提供了相同的結果用array_slice($array, $offset, $limit, true);;第四個參數保留關聯數組中的鍵。

+0

'array_slice'對於關聯數組有一個'$ preserve_keys = false'第四個參數。 – complex857 2012-07-27 14:55:36

+0

@ complex857良好的捕獲;我只是查了一下方法並確認了(並且已經更新了我的答案以匹配)。謝謝=] – newfurniturey 2012-07-27 14:59:35

4

隨着SPL(更好的內存佔用):

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

// Using iterator 
$limitIterator = new LimitIterator(new ArrayIterator($array), 0, 50); 
+0

新增迭代技巧。 – Florent 2012-07-27 14:59:48

+1

+1我喜歡LimitIterator,儘管我不稱它爲詭計。也許一個不太受歡迎的功能;) – nickb 2012-07-27 15:02:21

+0

@nickb它當然沒有任何竅門。我建議大家掌握無數的數組函數*和*各種可用的迭代器類。 – salathe 2012-07-30 21:41:45