2016-07-25 59 views
0

考慮以下幾點:從三個扁平陣列創建關聯數組

$a = array('Q1', 'Q2', 'Q3', 'Q4'); 
    $b = array('2014' => '101', '2014' => '102', '2014' => '103', '2014' => '104'); 
    $c = array('2015' => '101', '2015' => '102', '2015' => '103', '2015' => '104'); 

如何轉變這3列到一個這樣的:

array(
     'Q1' => array(
      '2014' => '101', 
      '2015' => '101' 
     ), 
     'Q2' => array(
      '2014' => '102', 
      '2015' => '102' 
     ), 
     'Q3' => array(
      '2014' => '103', 
      '2015' => '103' 
     ), 
     'Q4' => array(
      '2014' => '104', 
      '2015' => '104' 
     ) 
    ); 

我無法正確地合併$b$c以我可以使用array_combine$a的方式保持如上所述的期望結構。

對不起,代碼中的array(),我正在處理一個傳統的應用程序。

+2

你'$ B'和'$ C'陣列不會是這樣的多大用處 - 你不能有一個PHP數組重複鍵。 – iainn

+0

@ user2094178,你能用有效的輸入數組編輯你的問題嗎? – RomanPerekhrest

+0

@RomanPerekhrest對不起,這是一個愚蠢的問題。 – user2094178

回答

0

首先,你必須重複的數組鍵,在這種情況下,最後的重點將覆蓋前面的。在這裏,我們做了一個任意的假設,即關鍵字具有唯一的後綴,以便於您合意的合併。

<?php 

    $a = array('Q1', 'Q2', 'Q3', 'Q4'); 
    $b = array('2014' => '101', '2014_2' => '102', '2014_3' => '103', '2014_4' => '104'); 
    $c = array('2015' => '101', '2015_2' => '102', '2015_3' => '103', '2015_4' => '104'); 

    function mergeArraysAssociative($arrKeys, $array1, $array2) { 
     $merged = array(); 
     foreach ($arrKeys as $key => $val) { 
      $arrKeys1 = array_keys($array1); 
      $arrKeys2 = array_keys($array2); 

      $arrValues1 = array_values($array1); 
      $arrValues2 = array_values($array2); 

      $merged[$val][$arrKeys1[$key]] = $arrValues1[$key]; 
      $merged[$val][$arrKeys2[$key]] = $arrValues2[$key]; 

     } 

     return $merged; 
    } 

    var_dump(mergeArraysAssociative($a, $b, $c)); 

?> 
上面的var_dump()產生類似於下面顯示的內容。而且,你可以 quick test it here
array (size=4) 
    'Q1' => 
    array (size=2) 
     2014 => string '101' (length=3) 
     2015 => string '101' (length=3) 
    'Q2' => 
    array (size=2) 
     '2014_2' => string '102' (length=3) 
     '2015_2' => string '102' (length=3) 
    'Q3' => 
    array (size=2) 
     '2014_3' => string '103' (length=3) 
     '2015_3' => string '103' (length=3) 
    'Q4' => 
    array (size=2) 
     '2014_4' => string '104' (length=3) 
     '2015_4' => string '104' (length=3) 
0

這應該工作

<?php 
    $d = array(); 
    for($i=0; $i<count($a), $++){ 
     $d[$a[$i]][] = $b[$i]; 
     $d[$a[$i]][] = $c[$i]; 
    } 
    print_r($d) 
?>