我试图将以下两个数组合并为一个数组,共享相同的键:
第一阵列:
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"
}
}
Run Code Online (Sandbox Code Playgroud)
第二阵列:
array(3) {
[0]=>
array(1) {
["Camera1"]=>
string(2) "VT"
}
[1]=>
array(1) {
["Camera2"]=>
string(2) "UB"
}
[2]=>
array(1) {
["Camera3"]=>
string(2) "FX"
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,它们共享相同的键(Camera1,Camera2,Camera3等).
这是我尝试过的:
$Testvar = array_merge($NewArrayCam,$IpAddressArray);
foreach ($Testvar AS $Newvals){
$cam = array();
foreach($Newvals AS $K => $V){
$cam[] = array($K => $V);
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望以这样一种方式格式化这两个数组,这样array_merge_recursive就可以简单地合并数组而不用太大惊小怪.
但是我确实提出了一个使用的解决方案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);
Run Code Online (Sandbox Code Playgroud)
输出是:
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)
Run Code Online (Sandbox Code Playgroud)
使用array_merge_recursive:
将所有数字键转换为字符串,(make为关联数组)
$result = array_merge_recursive($ar1, $ar2);
print_r($result);
Run Code Online (Sandbox Code Playgroud)
参考:http://php.net/array_merge_recursive
小智 6
对于你的嵌套级别就足够了:
$sumArray = array_map(function ($a1, $b1) { return $a1 + $b1; }, $array1, $array2);
对于更深的嵌套,它不会工作.