Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

ozmnow's avatar

PHP Laravel check if two arrays has a matching key value and if so take a element from array 1 and insert in array 2

I have a few arrays that look like this:

['itemId' => 2, 'title' => 'someTitle', 'bulk_id' => 4]
['itemId' => 3, 'title' => 'someTitle', 'bulk_id' => 5]
['itemId' => 4, 'title' => 'someTitle', 'bulk_id' => 6]

And three more that looks like this:

['info' => 'someInfo', 'bulk_id' => 6]
['info' => 'someInfo', 'bulk_id' => 5]
['info' => 'someInfo', 'bulk_id' => 4]

Now I want to find the arrays that has a matching bulk_id and when I do I want to take the itemId element of the first array and add the second array so it would become this:

['itemId' => 4, 'info' => 'someInfo', 'bulk_id' => 6]
['itemId' => 3, 'info' => 'someInfo', 'bulk_id' => 5]
['itemId' => 2, 'info' => 'someInfo', 'bulk_id' => 4]

Does PhP or Laravel have any helper function for checking and combining arrays?

0 likes
5 replies
bobbybouwmann's avatar
Level 88

This should do the trick for you

$array1 = [
    ['itemId' => 2, 'title' => 'someTitle', 'bulk_id' => 4],
    ['itemId' => 3, 'title' => 'someTitle', 'bulk_id' => 5],
    ['itemId' => 4, 'title' => 'someTitle', 'bulk_id' => 6],    
];

$array2 = [
    ['info' => 'someInfo', 'bulk_id' => 6],
    ['info' => 'someInfo', 'bulk_id' => 5],
    ['info' => 'someInfo', 'bulk_id' => 4],
];

array_map(function ($a, $b) { 
    return $a + $b; 
}, $array1, $array2);

This will return

[
    [
        "itemId" => 2,
        "title" => "someTitle",
        "bulk_id" => 4,
        "info" => "someInfo",
    ],
    [
        "itemId" => 3,
        "title" => "someTitle",
        "bulk_id" => 5,
        "info" => "someInfo",
    ],
    [
        "itemId" => 4,
        "title" => "someTitle",
        "bulk_id" => 6,
        "info" => "someInfo",
    ],
]

Let me know if this is the thing you want!

1 like
ozmnow's avatar

@bobbybouwmann thx for the help, but this will only merge the two arrays. I only want to merge/take the itemId from array 1 and merge that into array2 as long as they have a matxhing bulk_id

burlresearch's avatar

Perhaps this variation on what @bobbybouwmann did?

$array1 = collect([
    ['itemId' => 2, 'title' => 'someTitle', 'bulk_id' => 4],
    ['itemId' => 3, 'title' => 'someTitle', 'bulk_id' => 5],
    ['itemId' => 4, 'title' => 'someTitle', 'bulk_id' => 6],
]);

$array2 = collect([
    ['info' => 'someInfo6', 'bulk_id' => 6],
    ['info' => 'someInfo5', 'bulk_id' => 5],
    ['info' => 'someInfo4', 'bulk_id' => 4],
    ['info' => 'someInfo3', 'bulk_id' => 3],
]);

$result = $array1->map(function ($a) use ($array2) {
    $bid = $a['bulk_id'];
    $res = $array2->first(function ($val) use ($bid) {
        return $val['bulk_id'] == $bid;
    });
    if (!!$res) return $a + $res;
});

print_r($result->toArray());

// yielding:
Array
(
    [0] => Array
        (
            [itemId] => 2
            [title] => someTitle
            [bulk_id] => 4
            [info] => someInfo4
        )

    [1] => Array
        (
            [itemId] => 3
            [title] => someTitle
            [bulk_id] => 5
            [info] => someInfo5
        )

    [2] => Array
        (
            [itemId] => 4
            [title] => someTitle
            [bulk_id] => 6
            [info] => someInfo6
        )

)
1 like
ozmnow's avatar

@bobbybouwmann and @burlresearch I got it working like this:

``$merged = collect($arrays2)->map(function ($value) use ($arrays1) {

    foreach($arrays1 as $array){
        if($value["bulk_id"]==$array["bulk_id"]){
            $value["itemId"] = $array["itemId"];
        }
    }

    return $value;
});``

Please or to participate in this conversation.