2012-04-21 115 views
0

试图根据数组的索引是否可以被整除来对数组进行分组。我试过for循环和foreach循环的各种组合,如果($ i%3 == 0)...但是,它不是以我需要的方式输出。PHP - 按键值分组数组

这里是一个大大简化阵列(原始数据中含有大量高度敏感信息......)

原始数组类似于这样:

$item[0]['Section 1']['Item 2'] => 1334; 
$item[1]['Section 2']['Item 3'] => 15454; 
$item[2]['Section 3']['Item 4'] => 1452; 
$item[3]['Section 4']['Item 5'] => 1341; 
$item[4]['Section 5']['Item 6'] => 1788655; 
$item[5]['Section 6']['Item 7'] => 13; 
$item[6]['Section 7']['Item 8'] => 142; 
$item[7]['Section 8']['Item 9'] => 15678; 
$item[8]['Section 9']['Item 10'] => 15542; 
$item[9]['Section 10']['Item 11'] => 16578; 
$item[10]['Section 11']['Item 12'] => 18452; 
$item[11]['Section 12']['Item 13'] => 16565; 

我想组每3个记录,像这样:

$newitem[0]['Section 1']['Item 2'] => 1334; 
$newitem[0]['Section 2']['Item 3'] => 15454; 
$newitem[0]['Section 3']['Item 4'] => 1452; 
$newitem[1]['Section 4']['Item 5'] => 1341; 
$newitem[1]['Section 5']['Item 6'] => 1788655; 
$newitem[1]['Section 6']['Item 7'] => 13; 
$newitem[2]['Section 7']['Item 8'] => 142; 
$newitem[2]['Section 8']['Item 9'] => 15678; 
$newitem[2]['Section 9']['Item 10'] => 15542; 
$newitem[3]['Section 10']['Item 11'] => 16578; 
$newitem[3]['Section 11']['Item 12'] => 18452; 
$newitem[3]['Section 12']['Item 13'] => 16565; 

回答

0

这应做到:

$newindex = 0; 
$newitem = array(); 
for($i = 0; $i < count($item); ++$i) 
{ 
    $newindex = (int) $i/3; 
    if(!isset($newitem[ $newindex ])) 
     $newitem[ $newindex ] = array(); 

    $newitem[ $newindex ] = array_merge($newitem[ $newindex ], $item[ $i ]); 
} 

Link to output(的$newitem转储)

的诀窍是(int) $i/3,这需要$i,通过3除以它,然后投射到int哪个trunc ates任何小数位。

0

建议使用array_chunkhttp://www.php.net/manual/en/function.array-chunk.php

$item = array_chunk($item, 3); 

或者

$newItem = array(); 
$x = 0; 
$t = 0; 
foreach ($item as $value) { 
    if ($x < 3) { 
     $newItem [$t] [$x] = $value; 
     $x ++; 
    } else { 
     $t ++; 
     $x = 0; 
     $newItem [$t] = array(); 
    } 
} 

var_dump ($newItem); 
+0

该格式不是“错误的”,例如, 'newitem [0]'只需要是一个关联数组。因此'array_chunk'会变得很近,但不会像他暗示的那样格式化它(即它提供了一个二维数组''newitem [0] [0]'''$ newitem [0] [1 ]','$ newitem [0] [2]','$ newitem [1] [0]',...) – 2012-04-21 02:07:15

+0

好吧..刚刚更新我的答案替代 – Baba 2012-04-21 02:14:19