2015-04-01 83 views
0

我有一个主机名数组及其相应的位置。查找拦截两个数组,然后合并两个

Array ([ABC01] => Array ([hostid] => 12345 
          [lat] => 123 
          [lon] => 123 
          [adr] => 126 Foo Street 
          [city] => Rocky Hill 
          [state] => Connecticut 
          [country] => USA) 
     [ABC02] => Array ([hostid] => 12346 
          [lat] => 345 
          [lon] => 345 
          [adr] => 123 Foo Street 
          [city] => Boston 
          [state] => Massachusetts 
          [country] => USA) 

     [ABC03] => Array ([hostid] => 12346 
          [lat] => 345 
          [lon] => 345 
          [adr] => 123 Foo Street 
          [city] => New York City 
          [state] => New York 
          [country] => USA) 
      .....) 

我比较它更阵 - 同一个主机名,但它链接到IP地址:

Array ([ABC01] => Array ([ip] => 192.168.2.1) 
     [ABC02] => Array ([ip] => 192.168.2.2) 
     [ABC03] => Array ([ip] => 192.168.2.3) 
     ) 

我想创建下面的数组:

  [ABC02] => Array ([hostid] => 12346 
          [lat] => 345 
          [lon] => 345 
          [adr] => 123 Foo Street 
          [city] => Boston 
          [state] => Massachusetts 
          [country] => USA 
          [ip] => 192.168.2.1) 

我试图找到数组的交集,然后合并两个(找到相同的键,然后合并)。我尝试了各种功能,但最终的结果从来都不是我想要的。

我设法找到一个函数here合并常见的钥匙,但它包含在另一个数组中的位置字段数组中的一个数组返回的IP,如下所示:

Array ([ABC02] => Array ([0] => Array ([hostid] => 12346 
          [lat] => 345 
          [lon] => 345 
          [adr] => 123 Foo Street 
          [city] => Boston 
          [state] => Massachusetts 
          [country] => USA 
          [1] => Array ([ip] => 192.168.2.1))) 

是否有更简单的方法做到这一点?

回答

4

很容易有一个内置的PHP函数:

$result = array_merge_recursive($large, $small); 

基于您的评论只得到那些共同的价值观,然后合并。这是假设在$small所有按键都在$large

$result = array_merge_recursive(array_intersect_key($large, $small), $small); 

不使假设,如果有可能在任何一个不在其他然后键:

$result = array_merge_recursive(array_intersect_key($large, $small), 
           array_intersect_key($small, $large)); 
+0

对不起,我没有指定:我不想全部合并两者 - 我希望截取两者,然后将较大阵列的相应值合并到较小的阵列中。用array_merge_recursive,我可以得到完整的列表。我知道我可以再用一个array_intercept_key和更小的数组来给我我想要的东西 - 它似乎是重复的。 – l33tspeak 2015-04-01 20:31:29

+0

已编辑。如果我现在明白了,那么它仍然非常简单。 – AbraCadaver 2015-04-01 20:34:27

+0

谢谢 - 这是诀窍!我开始做一个前端项目,所以我现在只能回到这个看起来很乏味的任务。 – l33tspeak 2015-04-07 14:06:17