Search code examples
phparraysmappingmerging-data

Add data from second 2d array to first 2d array based on related id columns


I have two arrays $a and $b

$a = [
    '0' => [
        'name'=>'Apple',
        'id' => 1
    ],
    '1' => [
        'name'=>'Banana',
        'id' => 2
    ],
    '2' => [
        'name' => 'orange',
        'id' => 3
    ]
];

AND

$b = [
    '0' => [
        'price'=> 20,
        'a_id' => 2
    ],
    '1' => [
        'price'=> 10,
        'a_id' => 3
    ],
    '3' => [
        'price'=> 30,
        'a_id' => 1
    ]
];

I am trying to create another array with mapping with id(array $a), a_id (array $b), where my output will looks like:

$a = [
    '0' => [
        'id' => 1
        'name'=>'Apple',
        'price' => 30
    ],
    '1' => [
        'id' => 2
        'name'=>'Banana',
        'price' => 20
    ],
    '2' => [
         'id' => 3
         'name' => 'orange',
         'price' => 10
    ]
];

I have tried by array map

$combined = array_map(null,$a,$b);

But this result is not my desire result. How can I map my 1st array with 2nd array related by $a['id'] = $b['a_id']?


Solution

  • This should work, also if there's no price for an item in the array $b then the default price 0 will be added.

    <?php
    
    $result = [];
    
    $t = array_column($b, 'a_id');
    
    foreach($a as $k => $v) {
        
        $index = array_search($v['id'], $t);
        $v['price'] = $index !== FALSE ? $b[$index]['price'] : 0;
        $result[] = $v;
    
    }
    
    print_r($result);
    
    ?>
    

    Result:

    (
        [0] => Array
            (
                [name] => Apple
                [id] => 1
                [price] => 30
            )
    
        [1] => Array
            (
                [name] => Banana
                [id] => 2
                [price] => 20
            )
    
        [2] => Array
            (
                [name] => orange
                [id] => 3
                [price] => 10
            )
    )