2012-04-21 76 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