2015-06-02 48 views
-1

如何通过键组合两个数组数组?通过键组合了两个数组阵列

例如: -

阵列1:

array (
    array (
    'id' => '1', 
    'A' => 'ABC' 
), 
    array (
    'id' => '2', 
    'A' => 'DEF' 
) 
) 

阵列2:

array (
    array (
    'id' => '2', 
    'B' => '456' 
) 
    array (
    'id' => '1', 
    'B' => '123' 
), 
) 

组合阵列:

array (
    array (
    'id' => '1', 
    'A' => 'ABC', 
    'B' => '123' 

), 
    array (
    'id' => '2', 
    'A' => 'DEF', 
    'B' => '456' 
) 
) 

将合并数组顺序并不重要,但它应该matc h基于提供的字段而不是自然顺序。

我试过了。虽然看起来效率不高。

public function combineArraysByKey($array_1, $array_2, $key = 'id') 
{ 
    $combined_array = array(); 

    foreach($array_1 as $sub_array_1) { 
     foreach($array_2 as $sub_array_2) { 
      if ($sub_array_1[$key] == $sub_array_2[$key]) { 
       $merged_sub_array = array_merge($sub_array_1, $sub_array_2); 
       array_push($combined_array, $merged_sub_array); 
      } 
     } 
    } 
    return $combined_array; 
} 
+4

如何?可能通过编写一个组合数组的函数。所以我会问:[你有什么尝试?](http://whathaveyoutried.com/) – kero

+0

这里的表现有多重要?如果你加入的密钥是内部数组的关键,那将更容易和更快。然后'array_merge'可能能够处理大部分你需要的东西。 – Bing

+0

@kingkero,请参阅编辑。不过,我对一个合适的解决方案感兴趣。 – waspinator

回答

1

[我的代码]不看效率虽然。

你只需要真正需要在每个数组上循环一次。

在您的示例函数中,嵌套循环内的代码将运行count($array_1) * count($array_2)次。而在每个阵列上循环一次只会是count($array_1) + count($array_2)次。

(显然,数量是相同的,当只有2个在每个阵列中的项目,但节省很快加起来。)

所以,在代码中,选择可以是这样的:

$combined_array = array(); 
foreach(array($array_1, $array_2) as $rows) { 
    foreach($rows as $row) { 
     $current_key = $row[$key]; 
     if (array_key_exists($current_key, $combined_array)) { 
      $combined_array[$current_key] += $row; 
     } else { 
      $combined_array[$current_key] = $row; 
     } 
    } 
} 
return $combined_array; 
2

尝试这样的: -

<?php 

$array1 = array (
    array (
    'id' => '1', 
    'A' => 'ABC' 
), 
    array (
    'id' => '2', 
    'A' => 'DEF' 
) 
); 

$array2 = array (
    array (
    'id' => '2', 
    'B' => '456' 
), 
    array (
    'id' => '1', 
    'B' => '123' 
), 
); 



function combineArraysByKey($array1, $array2) 
{ 
    foreach($array1 as $key => $value){ 
     foreach($array2 as $key1 => $value2){ 
      if($value['id'] === $value2['id']){ 
       unset($value2['id']); 
       $remaining_key = array_keys($value2); 
       $array1[$key][$remaining_key[0]] = $value2[$remaining_key[0]]; 
      }    
     } 
    } 
    return $array1; 
} 
$new_array = combineArraysByKey($array1, $array2); 
echo "<pre/>";print_r($new_array); 
?> 

输出: - https://eval.in/374523

+0

谢谢。我不确定这是否比我的功能好。如果可能,我不想做循环。 – waspinator