2014-09-02 43 views
0

我有一些阵这样的分组:PHP:合并多维数组,由某些关键

array(
    'id' => 1, 
    'title' => 'title1', 
    'name' => 'name1', 
    'count' => 2 
) 
array(
    'id' => 1, 
    'title' => 'title1', 
    'name' => 'name2', 
    'count' => 3 
) 
array(
    'id' => 2, 
    'title' => 'title2', 
    'name' => 'name1', 
    'count' => 2 
) 

我想将它们合并,以便与同idtitle阵列将被合并。结果应该是这样的:

array(
    'id' => 1, 
    'title' => 'title1', 
    'name' => array('name1', 'name2'), 
    'count' => array(2, 3) 
) 
array(
    'id' => 2, 
    'title' => 'title2', 
    'name' => 'name1', 
    'count' => 2 
) 

或者

array(
    'id' => 1, 
    'title' => 'title1', 
    'name' => 'name1, name2', 
    'count' => '2, 3' 
) 
array(
    'id' => 2, 
    'title' => 'title2', 
    'name' => 'name1', 
    'count' => 2 
) 

或者

array(
    'id' => 1, 
    'title' => 'title1', 
    'name1' => 2, 
    'name2' => 3 
) 
array(
    'id' => 2, 
    'title' => 'title2', 
    'name1' => 2 
) 

array_merge_recursive()将扩大,而不是分组所有的钥匙。 (全阵列还可以是对象的形式。)

原来的问题

其实它是从MySQL数据库,在那里我用COUNTGROUP BYJOIN产生上述三个数组查询结果。由于所有MySQL查询都具有单行结构,并且查询结果不能包含子组类型,因此某些结果行具有相同的idtitle。现在我想用PHP处理这些结果。

如果您还有其他更好的点子,也请写出来。

+0

那么,为什么不使用SQL来获得期望的结果? (按两列分组?) – 2014-09-02 08:20:09

+0

您可以使用GROUP_CONCAT在MySQL中执行此操作。看到这个问题:http://stackoverflow.com/questions/9861298/merge-multiple-mysql-rows-having-same-id – sjy 2014-09-02 08:20:33

+0

@AlmaDo按两列分组?那么'count'列是COUNT()的结果,'name'列是'COALESCE()'和两个'JOIN'语句的结果。我不能直接在'COUNT'的结果上使用'GROUP_CONCAT()'。 – Melkor 2014-09-02 08:40:31

回答

1

下面是代码

<?php 

$data=array(array(
    'id' => 1, 
    'title' => 'title1', 
    'name' => 'name1', 
    'count' => 2 
), 
array(
    'id' => 1, 
    'title' => 'title1', 
    'name' => 'name2', 
    'count' => 3 
), 
array(
    'id' => 2, 
    'title' => 'title2', 
    'name' => 'name1', 
    'count' => 2 
)); 

$result=array(); 

foreach($data AS $item) 
{ 
    $key=$item['id'].'_'.$item['title']; 

    if(!isset($result[$key])) 
    { 
     $result[$key]=array(
      'id'=>$item['id'], 
      'title'=>$item['title'], 
      'name'=>array(), 
      'count'=>array() 
     ); 
    } 

    $result[$key]['name'][]=$item['name']; 
    $result[$key]['count'][]=$item['count']; 
} 

print_r($result); 

这里是结果

Array 
(
    [1_title1] => Array 
     (
      [id] => 1 
      [title] => title1 
      [name] => Array 
       (
        [0] => name1 
        [1] => name2 
       ) 

      [count] => Array 
       (
        [0] => 2 
        [1] => 3 
       ) 

     ) 

    [2_title2] => Array 
     (
      [id] => 2 
      [title] => title2 
      [name] => Array 
       (
        [0] => name1 
       ) 

      [count] => Array 
       (
        [0] => 2 
       ) 

     ) 

) 
+0

非常感谢!我不知道它看起来很容易。我以为我必须做一个两三级的深循环。 – Melkor 2014-09-02 08:46:29