2014-01-15 58 views
1

有一個包含K個元素的數組。從這個陣列中獲取大量N < K項目的最佳方式是什麼?從數組開頭移位/切片N個元素

示例輸入:

$x = [1,2,3,4,5,6,7,8,9,10]; // K = 10 

希望的結果是,當N = 3;

$x1 = [1,2,3]; 
$x2 = [4,5,6]; 
$x3 = [7,8,9]; 
$x4 = [10]; 

顯然,沒有必要將結果存儲在變量中。只要有可能通過foreach(或任何其他迭代邏輯)處理它,它應該沒問題。

array_slice的問題是,它不會從陣列的開始處刪除N片。 array_shift的問題是它不支持同時移動多個項目。有沒有什麼比通過array_shift迭代更優雅?

+6

看一看'array_chunk' http://in1.php.net/manual/en/function.array-chunk.php –

+0

'array_chunk'是解決整個問題,但我認爲,你正在尋找的函數是'array_splice'。 – Barmar

+1

'array_chunk'正是我所需要的。 –

回答

5

array_chunk是你需要的。

<?php 
$x = [1,2,3,4,5,6,7,8,9,10]; 
print_r(array_chunk($x,3)); 

OUTPUT:

Array 
(
    [0] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
     ) 

    [1] => Array 
     (
      [0] => 4 
      [1] => 5 
      [2] => 6 
     ) 

    [2] => Array 
     (
      [0] => 7 
      [1] => 8 
      [2] => 9 
     ) 

    [3] => Array 
     (
      [0] => 10 
     ) 

) 
2

查找到array_chunk - >http://www.w3schools.com/php/func_array_chunk.asp

$x = [1,2,3,4,5,6,7,8,9,10]; 
print_r(array_chunk($x,3,true)); 

,或者你可以這樣來做 -

$x = [1,2,3,4,5,6,7,8,9,10]; 
    $chunks = array(); 
    while(count($x)){ 
    $chunks[] = array_splice($x, 0,3,array()); 
    $i++; 
    } 

有人能告訴我哪種方法更有效嗎?

1

array_chunk函數用於創建大小相等的子數組。 例如

$a=array_chunk($array,3);