[英]Merge two arrays in one, combining the data correspondingly
有了這兩個數組,它們分別具有完全相同的項數(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);
但我無法獲得想要的結果。
array_merge
不合並元素,它只是將數組相互連接。
您可以使用array_map()
array_merge()
在每對元素上調用array_merge()
:
$result = array_map('array_merge', $array1, $array2);
使用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);
我不知道您的輸入數據是什么樣子,所以我不得不做一些假設。 想法是遍歷所有電子郵件,在電子郵件數組中占據其位置,然后使用該位置定義名稱在名稱數組中的名稱。
$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"
}
}
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.