$arr1 = array(0 => 12, 5 => 10, 19 => 48);
$arr2 = array(0 => 14, 7 => 9, 12 => 11, 19 => 30);
null
我需要能够为任意数量的数组来执行此操作。我不确定从哪里开始。 我想,我可以通过每个数组迭代,将其值附加到结果上 - 但是我必须检查一下在将当前值附加到该索引之前,我是否有每个结果数组中必需数量的元素效率不高
$merge = array(
0 => array(12, 14),
5 => array(10, null),
7 => array(null, 9),
12 => array(null, 11),
19 => array(48, 30)
);
为任意数量的阵列进行了修改
$arr1 = array(0 => 12, 5 => 10, 19 => 48);
$arr2 = array(0 => 14, 7 => 9, 12 => 11, 19 => 30);
$keys = array_merge(array_keys($arr1), array_keys($arr2));
$merged = array();
foreach ($keys as $key) {
$merged[$key] = array();
$merged[$key][] = isset($arr1[$key]) ? $arr1[$key] : null;
$merged[$key][] = isset($arr2[$key]) ? $arr2[$key] : null;
}
ksort($merged);
echo '<pre>', var_dump($merged), '</pre>';
eDit
$arrays = array(
array(0 => 12, 5 => 10, 19 => 48),
array(0 => 14, 7 => 9, 12 => 11, 19 => 30),
// ... more arrays
);
$keys = array();
foreach ($arrays as $arr) {
$keys = array_merge($keys, array_keys($arr));
}
$merged = array();
foreach ($keys as $key) {
$merged[$key] = array();
foreach ($arrays as $arr) {
$merged[$key][] = isset($arr[$key]) ? $arr[$key] : null;
}
}
ksort($merged);
echo '<pre>', var_dump($merged), '</pre>';
输出:
我认为这就是您想要的。
Array
(
[0] => Array
(
[0] => 12
[1] => 14
)
[5] => Array
(
[0] => 10
[1] => NULL
)
[7] => Array
(
[0] => NULL
[1] => 9
)
[12] => Array
(
[0] => NULL
[1] => 11
)
[19] => Array
(
[0] => 48
[1] => 30
)
)
宣传内部的阵列将产生一个平坦的阵列,其中将保留独特的键。
/*Merge function*/
function merge($a1, $a2)
{
foreach($a1 as $key => $val)
$a1[$key] = Array($a1[$key], null);
foreach($a2 as $key => $val)
$a1[$key] = Array((isset($a1[$key]))? $a1[$key][0]: null, $val);
return ksort($a1);
}
/*Test*/
$arr1 = array(0 => 12, 5 => 10, 19 => 48);
$arr2 = array(0 => 14, 7 => 9, 12 => 11, 19 => 30);
foreach(merge($arr1, $arr2) as $key => $val){
echo "<br />$key --";
print_r($val);
}
/*output*/
0 --Array ( [0] => 12 [1] => 14 )
5 --Array ( [0] => 10 [1] => )
7 --Array ( [0] => [1] => 9 )
12 --Array ( [0] => [1] => 11 )
19 --Array ( [0] => 48 [1] => 30 )
array_replace()
。结果将是一个转移矩阵(每个唯一的列表示为行)。 demo