PHP数组合并在同一个键一个数组 [英] PHP Array Merge two Arrays on same key

查看:122
本文介绍了PHP数组合并在同一个键一个数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想下面的两个数组合并成一个数组,共享同一个密钥:

第一个数组:

 阵列(3){
  [0] =>
   阵列(1){
   [摄像机1] =>
   串(14)192.168.101.71
}
[1] =>
阵列(1){
  [摄像机2] =>
  串(14)192.168.101.72
}
[2] =>
阵列(1){
  [照相机] =>
  串(14)192.168.101.74
}
}

第二个数组:

 阵列(3){
 [0] =>
  阵列(1){
  [摄像机1] =>
  串(2)VT
 }
 [1] =>
 阵列(1){
   [摄像机2] =>
   串(2)UB
 }
 [2] =>
 阵列(1){
  [照相机] =>
  串(2)FX
 }
}

正如你所看到的,它们共享相同的密钥(摄像机1,摄像机,Camera3等)

下面是我曾尝试:

  $的testvar = array_merge($ NewArrayCam,$ IpAddressArray);
 的foreach($的testvar AS $ NEWVALS){
 $凸轮=阵列();
 的foreach($ NEWVALS AS $ K => $ V){
 $凸轮[] =阵列($ K => $ V);
 }


解决方案

理想的情况下我会看两个阵列以这样一种方式, array_merge_recursive 只会合并阵列格式没有太多的计较。

不过,我也拿出了所使用的溶液 array_map

  $ ARRAY1 =阵列(
    阵列(摄像机1=>中192.168.101.71),
    阵列(摄像机2=>中192.168.101.72),
    阵列(照相机=>中192.168.101.74),
);$数组2 =阵列(
    阵列(摄像机1=>中的VT),
    阵列(摄像机2=>中UB),
    阵列(照相机=>中的FX)
);$结果=阵列();array_map(函数($ A,$ B)使用(安培; $结果){    $键=电流(array_keys($ A));
    美元[$关键] =阵列(IP= GT; $ a [$关键]);    //再次获取密钥作为第二阵列可以具有不同的密钥。
    $键=电流(array_keys($ B));
    $ B [$关键] =阵列('名'=> $ B [$关键]);    $结果+ = array_merge_recursive($ A,$ B);} $数组1,$数组2);后续代码var_dump($结果);

输出是:

 阵列(大小= 3)
  摄像机1'=>
    阵列(尺寸= 2)的
      IP=>字符串'192.168.101.71'(长度= 14)
      '名'=>字符串'VT'(长度= 2)
  摄像机2'=>
    阵列(尺寸= 2)的
      IP=>字符串'192.168.101.72'(长度= 14)
      '名'=>字符串'UB'(长度= 2)
  Camera3'=>
    阵列(尺寸= 2)的
      IP=>字符串'192.168.101.74'(长度= 14)
      '名'=>字符串FX(长度= 2)

I am trying to merge the following two arrays into one array, sharing the same key:

First Array:

array(3) {
  [0]=>
   array(1) {
   ["Camera1"]=>
   string(14) "192.168.101.71"
}
[1]=>
array(1) {
  ["Camera2"]=>
  string(14) "192.168.101.72"
}
[2]=>
array(1) {
  ["Camera3"]=>
  string(14) "192.168.101.74"
}
}

Second Array:

array(3) {
 [0]=>
  array(1) {
  ["Camera1"]=>
  string(2) "VT"
 }
 [1]=>
 array(1) {
   ["Camera2"]=>
   string(2) "UB"
 }
 [2]=>
 array(1) {
  ["Camera3"]=>
  string(2) "FX"
 }
}

As you can see, they share the same key (Camera1, Camera2, Camera3, etc..)

Here is what I have tried:

 $Testvar = array_merge($NewArrayCam,$IpAddressArray);
 foreach ($Testvar AS $Newvals){
 $cam = array();
 foreach($Newvals AS $K => $V){
 $cam[] = array($K => $V);
 }

解决方案

Ideally I would look to format the two arrays in such a way that array_merge_recursive would simply merge the arrays without too much fuss.

However I did come up with a solution that used array_map.

$array1 = array(
    array("Camera1" => "192.168.101.71"),
    array("Camera2" => "192.168.101.72"),
    array("Camera3" => "192.168.101.74"),
);

$array2 = array(
    array("Camera1" => "VT"),
    array("Camera2" => "UB"),
    array("Camera3" => "FX")
);

$results = array();

array_map(function($a, $b) use (&$results) {

    $key = current(array_keys($a));
    $a[$key] = array('ip' => $a[$key]);

    // Obtain the key again as the second array may have a different key.
    $key = current(array_keys($b));
    $b[$key] = array('name' => $b[$key]);

    $results += array_merge_recursive($a, $b);

}, $array1, $array2);

var_dump($results);

The output is:

array (size=3)
  'Camera1' => 
    array (size=2)
      'ip' => string '192.168.101.71' (length=14)
      'name' => string 'VT' (length=2)
  'Camera2' => 
    array (size=2)
      'ip' => string '192.168.101.72' (length=14)
      'name' => string 'UB' (length=2)
  'Camera3' => 
    array (size=2)
      'ip' => string '192.168.101.74' (length=14)
      'name' => string 'FX' (length=2)

这篇关于PHP数组合并在同一个键一个数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆