2013-11-15 40 views
0

我有一个这样的数组:单独的数组为3个不同的阵列在PHP

array(
    '1' => 'Item 1', 
    '2' => 'Item 2', 
    '3' => 'Item 3', 
    '4' => 'Item 4', 
    '5' => 'Item 5', 
    '6' => 'Item 6', 
    '7' => 'Item 7', 
    '8' => 'Item 8', 
    '9' => 'Item 9' 
); 

我想这个分成3个阵列,其中键1,2,3进入$数组1,$数组2,$然后分别键入4,5,6和7,8,9分别进入$ array1,$ array2,$ array3。

所以,最后的结果将是:

$array1 = array(
    '1' => 'Item 1', 
    '2' => 'Item 4', 
    '3' => 'Item 7' 
); 

$array2 = array(
    '1' => 'Item 2', 
    '2' => 'Item 5', 
    '3' => 'Item 8' 
); 

$array3 = array(
    '1' => 'Item 3', 
    '2' => 'Item 6', 
    '3' => 'Item 9' 
); 

或者,如果他们密钥将被保留(每个数组在我的例子中没有1,2,3),那么也没有什么关系无论是。无论哪种方式都很好。

回答

2
foreach($arr as $key => $value) { 
    $final_arr[$key % 3][] = $value; 
} 
+0

很干净,很容易理解。只有一件事,每个数组项的关键将是数字,并从0开始,这可能是海报想要的 – Darkzaelus

+0

这实际上并不回答OP的问题,他希望3个不同的数组,而不是一个具有不同键的数组3套中的每一套。 – webnoob

+0

@webnoob是正确的,这并不完全符合我所问的信。但是,我将它标记为正确的答案,因为代码非常简单,干净而直接,最终结果仍然实现了我设定的目标,即将数据分成3个列表,每个列表的第一项是原始数组中的前3个键,每个列表中的第二个键是第二个3键等等。 – Joseph

2

某事像

$i=0; 
foreach($array as $k=>$v) { 
${"array".$i%3+1}[$k]=$v; 
$i++; 
} 
+0

如果周围添加'$ 1%3 + 1'部分支架,这将工作 – Darkzaelus

1
for($i = 0; $i < count($input); $i += 3) { 
    ${"array".$i} = array_slice($input, 0 + $i, 3); 
} 

这将分成每三元素的数组新的数组。你也可以用一个变量代替3来分割其他的数字。

编辑:哦我只是注意到,你可能想要抵消$我以正确的顺序获取数组名称。现在,这将是ARRAY3,array6,array9等

0
Try This 

      $first_arr = array(); 
       $second_arr = array(); 
       $third_arr = array(); 
       $first = 0; 
       $second = 1; 
       $third = 2;  
       foreach($array as $value) 
       { 
        if ($first++ % 3 == 0) 
        $first_arr[] = $value; 
        if ($second++ % 3 == 0) 
        $second_arr[] = $value; 
        if ($third++ % 3 == 0) 
        $third_arr[] = $value; 
       }