Laravel 6.18 объединить 2 списка по его идентификаторам - PullRequest
0 голосов
/ 08 мая 2020

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

    array1 = [
 {
  id: 1,
  firstName: "paul1",
},
{
  id: 2,
  firstName: "paul2",
},
{
  id: 3,
  firstName: "paul3",
}]

    array2 = [
 {
  id: 1,
  lastName: "jackson1"
},
{
  id: 3,
  lastName: "jackson3"
}]

и объединить результат будет

result = [
 {
  id: 1,
  firstName: "paul1",
  lastName: "jackson1"
},
{
  id: 2,
  firstName: "paul2",
},
{
  id: 3,
  firstName: "paul3",
  lastName: "jackson3"
}]

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Попробуйте следующее:

$result = $array1;
foreach ($array1 as $key => $value) {
    $match = collect($array2)->firstWhere('id', $value['id']);
    $result[$key]['lastName'] = $match ? $match['lastName'] : '';
}
0 голосов
/ 08 мая 2020

Как я сказал в комментарии «вы можете использовать array_replace_recursive с array_combine». Предположим, у вас есть эти два массива:

$array1 = array([
            'id'=>1,
            "firstName"=> "paul1",
        ], [
            'id'=>3,
            "firstName"=> "paul `has no last name`3",
        ], [
            'id'=>2,
            "firstName"=> "paul2",
        ],);

$array2 = array([
            'id'=>1,
            "lastName"=> "jackson1",
        ], [
            'id'=>2,
            "lastName"=> "jackson2",
        ], [
            'id'=>5,
            "lastName"=> "jackson `has no first name`5",
        ],);

, поэтому вы можете просто объединить их по идентификатору, например:

$marged = array_replace_recursive(
            array_combine(array_column($array1, "id"), $array1),
            array_combine(array_column($array2, "id"), $array2)
            )

ПРИМЕЧАНИЕ: вы можете изменить «id» с помощью ключа, который вам нужен

, поэтому ВЫВОД должен быть таким:

array:4 [▼
  1 => array:3 [▼
    "id" => 1
    "firstName" => "paul1"
    "lastName" => "jackson1"
  ]
  3 => array:2 [▼
    "id" => 3
    "firstName" => "has no last name3"
  ]
  2 => array:3 [▼
    "id" => 2
    "firstName" => "paul2"
    "lastName" => "jackson2"
  ]
  5 => array:2 [▼
    "id" => 5
    "lastName" => "jackson5"
  ]
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...