如何将两个PHP数组与类似的数组键合并

时间:2015-09-22 03:15:32

标签: php arrays array-merge

目前我正在为数组中的多个API返回数据工作。所有这些API都返回具有类似键的数组

例如 从API A,B和C返回数据:

$a=array(1=>"abc",2=>"def");
$b=array(1=>"ghi",2=>"jkl");
$c=array(1=>"mno",2=>"pqr");

所有这些数组都有重复的数字键。我的要求是一个没有覆盖键和值的单个数组。

要求的结果

$=array(1=>"abc",2=>"def", 3=>"ghi", 4=>"jkl", 5=>"mno", 6=>"pqr");

我尝试了array_merge()函数,但它覆盖了重复的密钥,array_merge_recursive()函数将所有重复的密钥累积到另一个数组中。

2 个答案:

答案 0 :(得分:2)

试试这个.......

$a=array(1=>"abc",2=>"def");
$b=array(1=>"ghi",2=>"jkl");
$c=array(1=>"mno",2=>"pqr");

$d = array();

foreach($a as $arr){
 array_push($d, $arr);
}

foreach($b as $arr){
 array_push($d, $arr);
}

foreach($c as $arr){
 array_push($d, $arr);
}
print_r($d);

输出

Array ( [0] => abc [1] => def [2] => ghi [3] => jkl [4] => mno [5] => pqr )

我也尝试过使用数组合并& amp;它给了我关注o / p。

Array ( [0] => abc [1] => def [2] => ghi [3] => jkl [4] => mno [5] => pqr )

答案 1 :(得分:1)

正确答案

对已接受答案的评论使事情变得更加清晰:

  

感谢Rohit,array_push方法适合我,虽然array_merge在数字键中工作,但不能使用字母数字键。

这是创建包含所有值的数组的较短替代方法,无论其键是什么:

$z = array_merge(
    array_values($a),
    array_values($b),
    array_values($c)
)

原始答案

这个答案会假设你在你的例子中犯了一个错误,因为它对你的要求没有意义。

考虑到:

  • 您不希望覆盖密钥,就像array_merge()
  • 一样
  • 同一个密钥在同一个数组中不能存在两次

我必须假设你的例子看起来如下:

// input
$a = array(1=>"abc", 2=>"def");
$b = array(3=>"ghi", 4=>"jkl");
$c = array(5=>"mno", 6=>"pqr");
// expected output
$z = array(1=>"abc", 2=>"def", 3=>"ghi", 4=>"jkl", 5=>"mno", 6=>"pqr");

使用Array Operators可以很容易地实现这一点。

  

$a + $b $ a和$ b的联盟。

     

+运算符返回附加到左侧数组的右侧数组;对于存在于两个数组中的键,将使用左侧数组中的元素,并且将忽略右侧数组中的匹配元素。

使解决方案简单如下:

$a = array(1=>"abc", 2=>"def");
$b = array(3=>"ghi", 4=>"jkl");
$c = array(5=>"mno", 6=>"pqr");

$z = $a+$b+$c;

print_r($z);

输出:

Array
(
    [1] => abc
    [2] => def
    [3] => ghi
    [4] => jkl
    [5] => mno
    [6] => pqr
)