2014-01-15 32 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);