2012-03-12 21 views
0

我有此代码阵列输出 - 次序在索引结构

$nArr = array('A', 'B', 'C', 'D', 'E', 'F'); 

$counter = 3; 
while ($counter > 0) { 
    $chunkedValues[$counter][0] = 1; 
    for ($j = 0 ; $j < $counter ; $j++) { 
     $chunkedValues[$counter][$j + 1] = $nArr[$j]; 
    } 
    $nArr = array_slice($nArr, $counter--); 
} 
var_dump($chunkedValues); 

输出:

array 
    3 => 
    array 
     0 => int 1 
     1 => string 'A' (length=1) 
     2 => string 'B' (length=1) 
     3 => string 'C' (length=1) 
    2 => 
    array 
     0 => int 1 
     1 => string 'D' (length=1) 
     2 => string 'E' (length=1) 
    1 => 
    array 
     0 => int 1 
     1 => string 'F' (length=1) 

但我需要该索引结构:

array 
    0 => 
    array 
     0 => int 1 
     1 => string 'A' (length=1) 
     2 => string 'B' (length=1) 
     3 => string 'C' (length=1) 
    1 => 
    array 
     1 => int 1 
     2 => string 'D' (length=1) 
     3 => string 'E' (length=1) 
    2 => 
    array 
     2 => int 1 
     3 => string 'F' (length=1) 

我想以避免与ceil循环。

有什么想法?谢谢你的时间。

回答

2
$nArr = array('A', 'B', 'C', 'D', 'E', 'F'); 

$chunkedValues = array(); 
$gCounter = 0; 
for ($counter = 3, $start = 0; $counter > 0; $counter--, $start++) { 
    $arr = array($start => 1); 
    for ($j = 0; $j < $counter; $j++) $arr[]= $nArr[$gCounter++]; 
    $chunkedValues []= $arr; 
} 

var_dump($chunkedValues); 

或者如果你不关心顺序的元素:

$nArr = array('A', 'B', 'C', 'D', 'E', 'F'); 

$chunkedValues = array(); 
$gCounter = 0; 
for ($counter = 3, $start = 0; $counter > 0; $counter--, $start++) { 
    $arr = array_combine(
     range($start+1, $counter) 
     array_slice($nArr, $gCounter, $gCounter += $counter); 
    ); 
    $arr[$start] = 1; 
    $chunkedValues []= $arr; 
} 

var_dump($chunkedValues); 
+0

NOP,[0] [0]应该是1,[1] [1]应该是1,[2] [2]应等于1。 – user947462 2012-03-12 16:32:22

+0

更新了答案 – kirilloid 2012-03-12 16:49:20

0

你只是分手了一个数组?

看起来你也许可以只使用:

$nArr = array('A', 'B', 'C', 'D', 'E', 'F'); 
$chunked = array_chunk($nArr , 3); 
var_dump($chunked);