2014-09-02 46 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