2012-12-08 201 views
1

現在變得越來越困難。我有一個這樣的查詢結果:將不同的多個陣列合併到單個陣列

結果=陣列(

A = array(
     [a]=>'1', 
     [b] =>'2', 
    ); 

B = array(
     [a] =>'1', 
     [b] =>'3', 
    ); 

C = array(
     [a] =>'1', 
     [b] =>'4', 
    ); 

**and more...** 

);

那麼,如何可以將它們合併成一個陣列是這樣的:

結果=陣列(

 Z = array(

     [a] =>'1', 
     [b] => array(

       [0] =>'2', 
       [1] =>'3', 
       [2] =>'4', 
     ); 

    ); 

);

謝謝你,併爲我糟糕的演示感到抱歉。

回答

2

你可以看看array_merge功能PHP Manual

+0

array_merge將用兩個關聯數組中的鍵值替換後者關聯數組中的鍵值。 –

1

如果您打算只在鍵(字符串,數字等)的原始值這將工作:

<?php 

function array_combine_keys($a, $b) { 
    $c = $a; 
    foreach ($b as $k=>$v) { 
     // Value can be only primitive, not an array itself 
     if (isset($a[$k]) && $a[$k] !== $v) { 
      $c[$k] = array($a[$k], $v); 
     } else { 
      $c[$k] = $v; 
     } 
    } 
    return $c; 
} 

$a = array('a' => '1', 'b' => '2'); 
$b = array('a' => '1', 'b' => '3', 'c' => '5'); 

var_dump(array_combine_keys($a, $b)); 

?> 

array(3) { 
    ["a"]=> 
    string(1) "1" 
    ["b"]=> 
    array(2) { 
    [0]=> 
    string(1) "2" 
    [1]=> 
    string(1) "3" 
    } 
    ["c"]=> 
    string(1) "5" 
} 

更通用的方法是以允許數組中的數組以及確保鍵始終是數組 - 這意味着當遍歷結果時,我們不需要額外的邏輯來檢查鍵是數組還是不是數組。 (+)是兩個數組的並集。

<?php 

function array_combine_keys($a, $b) { 
    $c = $a; 
    foreach ($b as $k=>$v) { 
     if (!is_array($v)) { 
      $v = array($v); 
     } 
     if (isset($a[$k])) { 
      $av = $a[$k]; 
      if (!is_array($av)) { 
       $av = array($av); 
      } 
      $c[$k] = $av + $v; 
     } else { 
      $c[$k] = $v; 
     } 
    } 
    return $c; 
} 

$a = array('a' => '1', 'b' => array('2', '4')); 
$b = array('a' => '1', 'b' => array('3'), 'c' => '5'); 

var_dump(array_combine_keys($a, $b)); 

?> 

array(3) { 
    ["a"]=> 
    array(1) { 
    [0]=> 
    string(1) "1" 
    } 
    ["b"]=> 
    array(2) { 
    [0]=> 
    string(1) "2" 
    [1]=> 
    string(1) "4" 
    } 
    ["c"]=> 
    array(1) { 
    [0]=> 
    string(1) "5" 
    } 
} 
+0

非常感謝,這真的幫助我很多.. –

1

我不知道你爲什麼keep asking the same question但這是我對你的問題的答案。

$result = array_merge_recursive($a, $b, $c); 
foreach($result as $k => $v) $result[$k] = array_unique($v); 
print_r($result);