将两个数组合并为一个,相应地合并数据

时间:2018-10-01 21:13:09

标签: php arrays laravel

这两个数组具有完全相同的项目数(3)和分别对应的数据,我如何将它们合并到一个唯一的数组中,像我在数组3示例中所示那样合并数据

// array 1
[ ▼ 3 items
  {
    "email": "john-doe@example.tld"
  },
  {
    "email": "joe-bloggs@example.tld"
  },
  {
    "email": "foo-bar@example.tld"
  }
]

// array 2
[ ▼ 3 items
  {
    "name": "John Doe"
  },
  {
    "name": "Joe Bloggs"
  },
  {
    "name": "Foo Bar"
  }
]

我如何将它们合并成这样:

// array 3
[ ▼ 3 items
  {
    "name": "John Doe",
    "email": "john-doe@example.tld"
  },
  {
    "name": "Joe Bloggs",
    "email": "joe-bloggs@example.tld"
  },
  {
    "name": "Foo Bar",
    "email": "foo-bar@example.tld"
  }
]

我正在使用laravel php。我已经尝试过array_merge($array1, $array2)和一些laravel函数$res = $array1->merge($array2);,但无法获得想要的结果。

3 个答案:

答案 0 :(得分:3)

array_merge不会合并元素,而只是将数组彼此串联。

您可以使用array_map()在每对元素上调用array_merge()

$result = array_map('array_merge', $array1, $array2);

答案 1 :(得分:1)

使用laravel的Combine()方法

$collection = collect(['name', 'email']);
for($i=0;$i<count($array1);$i++){
$combined[] = $collection->combine([$array2[$i],$array1[$i]]);
}
$combined->all();

或仅使用集合

$collection = collect($array1, $array2);

答案 2 :(得分:1)

我不知道您的输入数据是什么样子,所以我不得不做一些假设。想法是遍历所有电子邮件,在电子邮件数组中占据其位置,然后使用该位置定义名称在名称数组中的名称。

$emails = [
    ["email" => "john-doe@example.tld"], 
    ["email" => "joe-bloggs@example.tld"], 
    ["email" => "foo-bar@example.tld"]
];

$names = [
    ["name" => "John Doe"],
    ["name" => "Joe Bloggs"],
    ["name" => "Foo Bar"]
];

$names_and_emails = [];

foreach ($emails as $key => $email) {
    $names_and_emails[] = ["email" => $email['email'], "name" => $names[$key]['name']];
}

var_dump($names_and_emails);

输出:

array(3) {
  [0]=>
  array(2) {
    ["email"]=>
    string(20) "john-doe@example.tld"
    ["name"]=>
    string(8) "John Doe"
  }
  [1]=>
  array(2) {
    ["email"]=>
    string(22) "joe-bloggs@example.tld"
    ["name"]=>
    string(10) "Joe Bloggs"
  }
  [2]=>
  array(2) {
    ["email"]=>
    string(19) "foo-bar@example.tld"
    ["name"]=>
    string(7) "Foo Bar"
  }
}

希望这会有所帮助。