我正在尝试将以下两个数组合并为一个数组,共享相同的键:
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"
}
}
第二阵列:
array(3) {
[0]=>
array(1) {
["Camera1"]=>
string(2) "VT"
}
[1]=>
array(1) {
["Camera2"]=>
string(2) "UB"
}
[2]=>
array(1) {
["Camera3"]=>
string(2) "FX"
}
}
如您所见,它们共享相同的密钥(Camera1,Camera2,Camera3等)。
以下是我的尝试:
$Testvar = array_merge($NewArrayCam,$IpAddressArray);
foreach ($Testvar AS $Newvals){
$cam = array();
foreach($Newvals AS $K => $V){
$cam[] = array($K => $V);
}
答案 0 :(得分:9)
理想情况下,我希望以这样的方式格式化这两个数组: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);
输出结果为:
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)
答案 1 :(得分:8)
答案 2 :(得分:7)
使用array_merge_recursive:
将所有数字键转换为字符串,(make为关联数组)
$result = array_merge_recursive($ar1, $ar2);
print_r($result);
答案 3 :(得分:6)
对于你的嵌套级别就足够了:
$sumArray = array_map(function ($a1, $b1) { return $a1 + $b1; }, $array1, $array2);
对于更深的嵌套,它不会起作用。
答案 4 :(得分:2)
如果两个数组具有相同数量的级别和键,则应该起作用:
$array3 = array();
foreach ($array1 as $key1 => $value1) {
// store IP
$array3['Camera'.$key1]['IP'] = $value['Camera'.$key1];
// store type of cam
$array3['Camera'.$key1]['Type'] = $array2[$key]['Camera'.$key1];
}
最后$ array3应该是这样的:
$array3 = array {
["Camera1"] => {['IP'] => "192.168.101.71", ['Type'] => "VT" }
["Camera2"] => {['IP'] => "192.168.101.72", ['Type'] => "UB" }
["Camera3"] => {['IP'] => "192.168.101.74", ['Type'] => "FX" }
}
答案 5 :(得分:1)
this would be one of the soluion:
function array_merge_custom($array1,$array2) {
$mergeArray = [];
$array1Keys = array_keys($array1);
$array2Keys = array_keys($array2);
$keys = array_merge($array1Keys,$array2Keys);
foreach($keys as $key) {
$mergeArray[$key] = array_merge_recursive(isset($array1[$key])?$array1[$key]:[],isset($array2[$key])?$array2[$key]:[]);
}
return $mergeArray;
}
$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")
);
echo '<pre>';
print_r(array_merge_custom($array1 , $array2));
答案 6 :(得分:0)
这样的事情应该有效:
$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();
foreach($array1 as $key => $array){
foreach($array as $camera => $value){
$results[$camera]['ip'] = $value;
}
}
foreach($array2 as $key => $array){
foreach($array as $camera => $value){
$results[$camera]['name'] = $value;
}
}
print_r($results);
答案 7 :(得分:0)
主要问题是数组。由于它们的结构方式,合并它们变得不必要地复杂化。它们只是普通的关联数组(即array('Camera1' => 'VT')
,然后合并它们就不费力了。
我建议你弄清楚如何格式化数据,以便更容易使用。
这是合并两个数组的快速而肮脏的方法。它需要一个阵列中的一个“摄像头”,然后尝试在另一个阵列中找到相应的“摄像头”。该功能仅使用$ips
数组中的“相机”,并且仅使用匹配的CameraN
键。
$ips = array(
array('Camera1' => '192.168.101.71'),
array('Camera2' => '192.168.101.72'),
array('Camera3' => '192.168.101.74'),
);
$names = array(
array('Camera1' => 'VT'),
array('Camera2' => 'UB'),
array('Camera3' => 'FX'),
);
function combineCameras($ips, $names) {
$output = array();
while ($ip = array_shift($ips)) {
$ident = key($ip);
foreach ($names as $key => $name) {
if (key($name) === $ident) {
$output[$ident] = array(
'name' => array_shift($name),
'ip' => array_shift($ip),
);
unset($names[$key]);
}
}
}
return $output;
}
var_dump(combineCameras($ips, $names));
答案 8 :(得分:0)
这对我有用。 我加入了两个具有相同键的数组
$array1 = ArrayUtils::merge($array1, $array2);
如果您需要保留NumericKey,请使用
$array1 = ArrayUtils::merge($array1, $array2, true);