2017-02-13 45 views
0

我需要在第二個級別上使用不同的鍵名稱合併兩個數組,但使用相同數量的鍵。用不同的鍵在第二級合併2個陣列

  • 用戶A = 102
  • 用戶userb = 103

我的期望的輸出將是陣列3

我已經嘗試了許多的變化得到這個在一起。

我最好的嘗試是像下面,但它破壞了我的鍵名:

$results = array(); 

foreach($arr1 as $key => $array) 
{ 
    foreach($array as $user => $value) 
    { 
    $results[$user]['name'] = $value; 
    } 
} 

foreach($arr2 as $key => $array) 
{ 
    foreach($array as $user => $value) 
    { 
    $results[$user]['name2'] = $value; 
    } 
} 

陣列1:

 Array 
     (
      [usera] => Array 
       (
        [0] => Array 
         (
          [user] => usera 
          [duration_s] => 15 
         ) 

        [1] => Array 
         (
          [user] => usera 
          [duration_s] => 9 
         ) 
       ) 
      [userb] => Array 
       (
        [2] => Array 
         (
          [user] => userb 
          [duration_s] => 21 
         ) 

        [3] => Array 
         (
          [user] => userb 
          [duration_s] => 19 
         ) 
       ) 

     ) 

陣列2:

Array 
      (
       [102] => Array 
        (
         [0] => Array 
          (
           [user] => 102 
           [duration_s2] => 54 
          ) 

         [1] => Array 
          (
           [user] => 102 
           [duration_s2] => 378 
          ) 
        ) 
       [103] => Array 
        (
         [2] => Array 
          (
           [usernr] => 103 
           [duration_s2] => 299 
          ) 

         [3] => Array 
          (
           [usernr] => 103 
           [duration_s2] => 110 
          ) 
        ) 

      )  

陣3:

Array 
    (
     [usera] => Array 
      (
       [0] => Array 
        (
         [user] => usera 
         [duration_s] => 15 
         [usernr] => 102 
         [duration_s2] => 54 
        ) 

       [1] => Array 
        (
         [user] => usera 
         [duration_s] => 9 
         [usernr] => 102 
         [duration_s2] => 378 
        ) 
      ) 
     [userb] => Array 
      (
       [2] => Array 
        (
         [user] => userb 
         [duration_s] => 21 
         [usernr] => 103 
         [duration_s2] => 299 
        ) 

       [3] => Array 
        (
         [user] => userb 
         [duration_s] => 19 
         [usernr => 103 
         [duration_s2] => 110 
        ) 
      ) 

    ) 
+0

也許你應該看看你如何創建原始2陣列。在那裏進行修改,以便創建所需的數組作爲該進程的一部分 – RiggsFolly

+0

感謝您的回覆。陣列來自2個獨立的數據庫主機,所以我無法將它們連接在一起。 – Pandora

+0

我們是否假設沒有邏輯意義的數組索引只是錯字?或者'Userb'的子數組真的包含索引'[2]&[3]'而不是'[0]&[1]' – RiggsFolly

回答

0

使用array_values()試試下面的代碼:

<?php 
$array1 = [ 
    'usera' => [ 
       0=> ['user' => 'usera','duration_s' => 15], 
       1=> ['user' => 'usera','duration_s' => 9], 
      ], 
    'userb' => [ 
       2=> ['user' => 'usera','duration_s' => 15], 
       3=> ['user' => 'usera','duration_s' => 9], 
      ], 

    ]; 

$array2 = [ 
    102 => [ 
    0=> ['usernr' => 102,'duration_s2' => 54], 
    1=> ['usernr' => 102,'duration_s2' => 378] 
    ], 
103 => [ 
    2=> ['usernr' => 103,'duration_s2' => 299], 
    3=> ['usernr' => 103,'duration_s2' => 110] 
], 

]; 


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

foreach($array1 as $index=>$ar1){ 
foreach ($ar1 as $index2=>$ar2){ 
    $array1[$index][$index2] = array_merge($ar2,$array2[$index][$index2]); 
} 
} 


print_r($array1); 
+0

完美。非常感謝。 – Pandora

+0

歡迎...... :) @Pandora – mith

0

要合併的數組,你也可以做到以下幾點:

$index = 0; 
foreach ($arr2 as $key => $value) { // changing the indexing of second array 
    $arr3[$index] = $value; 
    $index++; 
} 

$results = array(); 

$count = 0; 
foreach ($arr1 as $index => $value) { // merging two array 

    $total = 0; 
    foreach ($value as $key => $val) { 
     $merge_value = array_merge($val,$arr3[$count][$total]); 
     $results[$index][$total] = $merge_value; 
     $total++; 
    } 
    $count++; 
} 
print_r($results); 

在這個結果您的索引會不會丟失。

+0

這會更好,但如果我沒有弄錯,第二個用戶子數組的結果是空的。 – Pandora

+0

根本不..您可以試一試 –

+0

對於我來說,總變量需要在第二個foreach語句之上聲明才能得到想要的結果。 – Pandora