2014-02-07 160 views
0

我是新来的PHP,和我想下面的两个数组合并成一个阵列,匹配相同的编码值:PHP数组合并两个数组具有相同价值

Array(1) 
(
    [0] => Array 
     (
      [0] => CODE11 
      [1] => NAME 
      [2] => ADDRESS 
     ) 
    [1] => Array 
     (
      [0] => CODE23 
      [1] => NAME 
      [2] => ADDRESS 
     ) 
    [2] => Array 
     (
      [0] => CODE25 
      [1] => NAME 
      [2] => ADDRESS 
     ) 
) 

Array(2) 
(
    [0] => Array 
     (
      [0] => CODE43 
      [1] => CITY 
      [2] => COUNTRY 
     ) 
    [1] => Array 
     (
      [0] => CODE25 
      [1] => CITY 
      [2] => COUNTRY 
     ) 
    [2] => Array 
     (
      [0] => CODE89 
      [1] => CITY 
      [2] => COUNTRY 
     ) 
) 

到这个新的数组:

Result 
(
    [0] => Array 
     (
      [0] => CODE25 
      [1] => NAME 
      [2] => ADDRESS 
      [3] => CITY 
      [4] => COUNTRY 
     ) 
) 

正如你所看到的,只有CODE25两个阵列上匹配。我如何解决它?

+0

可能的重复http://stackoverflow.com/questions/8561987/php-merge-two-arrays?rq=1 – 2014-02-07 02:51:03

+2

这看起来没有类似的问题。标题是相似的,但就是这样。 – Barmar

+0

如果您不发布,我们无法告诉您如何修复您的代码。 – Barmar

回答

2
$hash = array(); 
// First create an associative array from $array1 using the CODE as the key 
foreach ($array1 as $el) { 
    $hash[$el[0]] = $el; 
} 
// Then append the data from $array2 to matching elements 
foreach ($array2 as $el) { 
    if (isset($hash[$el[0]])) { 
     $hash[$el[0]] = array_merge($hash[$el[0]], array_slice($el, 1)); 
    } 
} 
// Now find the elements that were matched and return them as an ordinary array 
$new_array = array_values(array_filter($hash, function($x) { return count($x) > 3; })); 
+0

+1,算法简单,比我的速度快:) – Jivan

+0

谢谢你的帮忙!但我不能让它工作!实际上,我的两个数组中的每一个都有15.000个子数组,并且算法只返回1个结果=( – PizzaMonster

+0

你能用'var_export()'发布一些示例数据,所以我可以尝试使用它运行我的脚本吗? – Barmar

0

我们可以使用PHP函数,用更少的代码做到这一点,但不是这一点,因为你正在学习,让我们尝试一个非常基本的方法:

foreach ($array1 as $key1 => $value1) 
{ 
    foreach ($array2 as $key2 => $value2) 
    { 
     if ($value1[0] == $value2[0]) 
      $result[] = array(
       $value1[0], 
       $value1[1], 
       $value1[2], 
       $value2[1], 
       $value2[2] 
      ); 
    } 
} 

免责声明:这是不是一个非常有效的算法。但是对于短时间的数据(每个数字为$array1$array2,<两个密钥),它将毫不费力地执行这个技巧。有关更多信息,请参阅Big O notation

+0

您正在复制CODE – Barmar

+0

我忘记了我的想法 – Jivan

+0

试过了你的代码..没有运气其实我是用15.000阵列工作的,我用的代码跟这个很相似: 'foreach($ array1 as $ value ) { 的foreach(如$值1数组2 $) { 如果($值 '0'] == $值1 [0]){ 做某事....; } } }' 但我的电脑i7似乎无法处理它=( – PizzaMonster

相关问题