Объединить два массива в один, объединяя данные соответственно - PullRequest
0 голосов
/ 02 октября 2018

Имея эти два массива с одинаковым количеством элементов (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 голосов
/ 02 октября 2018

array_merge не объединяет элементы, а просто объединяет массивы друг с другом.

Вы можете использовать array_map() для вызова array_merge() для каждой пары элементов:

$result = array_map('array_merge', $array1, $array2);
0 голосов
/ 02 октября 2018

Я не знаю, как выглядят ваши входные данные, поэтому мне пришлось сделать несколько предположений.Идея состоит в том, чтобы перебрать все электронные письма, занять их позицию в массиве электронных писем и использовать эту позицию, чтобы определить, какое имя будет в массиве имен.

$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"
  }
}

Надеюсь, это поможет.

0 голосов
/ 02 октября 2018

Используйте метод объединения () laravel

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

или просто используйте коллекцию

$collection = collect($array1, $array2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...