Search code examples
phpmultidimensional-arrayarray-merge

Merge row data based on the column value of two 2d arrays


How can I merge these two array together?

Array
(
[0] => Array
    (
        [id] => 5
        [cnt] => 14
    )

[1] => Array
    (
        [id] => 8
        [cnt] => 2
    )

)

Array
(
    [0] => Array
        (
            [id] => 8
            [binding] => hardcover
        )

    [1] => Array
        (
            [id] => 5
            [binding] => softcover
        )
)

The expected result is:

Array
    (
        [0] => Array
            (
                [id] => 5
                [binding] => softcover
                [cnt] => 14
            )

        [1] => Array
            (
                [id] => 8
                [binding] => hardcover
                [cnt] => 2
            )

    )

The merge of these two array should happen on the [id] value and not on any sort of the array. How can I do this with php in a fast way?


Solution

  • $output = array();
    
    $arrayAB = array_merge($arrayA, $arrayB);
    foreach ( $arrayAB as $value ) {
      $id = $value['id'];
      if ( !isset($output[$id]) ) {
        $output[$id] = array();
      }
      $output[$id] = array_merge($output[$id], $value);
    }
    
    var_dump($output);
    

    Optionally if you want to reset output's keys, just do:

    $output = array_values($output);