如何合并两个具有相同索引的嵌套关联数组?

时间:2016-06-15 08:21:59

标签: php arrays

我有两个具有相同索引的数组,不幸的是array_merge_recursive对我不起作用。

第一个数组是这样的:

<ion-item ng-show='query' ng-repeat="order in orders | filter:query" class="item-thumbnail-left item-text-wrap"
      href="#/tab/list/{{order.bkur_user}}">

第二个数组是:

$firstarray = array(
    0 => array('id' => 1, 'name' => 'John Smith'),
    1 => array('id' => 2, 'name' => 'Jane Doe')         
);

期望的输出将是这样的,

$secondarray = array(
    0 => array('email' => 'john@smith.com'),
    1 => array('email' => 'jane@doe.com')
);

但我得到第二个数组项附加到原始数组,如下所示:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => John Smith
            [email] => john@smith.com
        )

    [1] => Array
        (
            [id] => 2
            [name] => Jane Doe
            [email] => jane@doe.com
        )

)

4 个答案:

答案 0 :(得分:3)

for($i = 0; $i<count($firstarray); $i++){
   $output[] = array_merge($firstarray[$i],$secondarray[$i]);
}

您可以使用上面提到的代码,也可以使用array_map()&amp; array_merge()。 像:

$output = array_map('array_merge', $firstarray, $secondarray);

答案 1 :(得分:1)

你们肯定会采取复杂的方式:)

$mergedarray = array_map('array_merge', $firstarray, $secondarray);

基本上&#34;合并每个索引的数组&#34;。

array_merge_recursive不起作用,因为数字索引不被视为关联键。所以它只是推动价值而不是合并它们。

答案 2 :(得分:0)

尝试以下代码: -

$firstarray = array(
    0 => array('id' => 1, 'name' => 'John Smith'),
    1 => array('id' => 2, 'name' => 'Jane Doe')         
);

$secondarray = array(
    0 => array('email' => 'john@smith.com'),
    1 => array('email' => 'jane@doe.com')
);

使用简单的foreach循环

$res = [];
foreach($firstarray as $k=>$record){
  $record['email'] = $secondarray[$k]['email'];
  $res[] = $record;
}
echo '<pre>'; print_r($res);

或使用array_map()功能

$res = array_map(function($a,$b){
  return ['id'=>$a['id'],'name'=>$a['name'],'email'=>$b['email']];
},$firstarray,$secondarray);
echo '<pre>'; print_r($res);

答案 3 :(得分:0)

试试这个:

    $firstarray = array(
    0 => array('id' => 1, 'name' => 'John Smith'),
    1 => array('id' => 2, 'name' => 'Jane Doe')
 );

  $secondarray = array(
    0 => array('email' => 'john@smith.com'),
    1 => array('email' => 'jane@doe.com')
  );

 foreach($firstarray as $key1 => $value1)
 {
   foreach($secondarray as $key2 => $value2)
   {
        if($key1 == $key2)
        {
            $firstarray[$key1]["email"] = $value2["email"];
        }
    }
 }
 print_r($firstarray);