Search code examples
phparraysmultidimensional-arraylistings

php compare two arrays and order output by ref


I have arrays order (list) by ref :

$a = array('Blue', 'Red', 'Orange', 'Yellow');

And new elements (mixing order + new element) :

$b = array('Orange', 'Blue', 'Yellow', 'Red', 'Pink');

I want my outcome ($b) to be, like in $a order + new(s) element(s) :

Result : Array
 (
 [0] => Blue
 [1] => Red
 [2] => Orange
 [3] => Yellow
 [4] => Pink
 )

Any idea in language reference ?


Solution

  • If you want to preserve array indexes doing $a + difference($b-a)

    $a = array('Blue', 'Red', 'Orange', 'Yellow');
    $b = array('Orange', 'Blue', 'Yellow', 'Red', 'Pink');
    
    $merged = array_merge($a, array_diff($b, $a));
    print_r($merged);
    

    outputs

    Array
        (
            [0] => Blue
            [1] => Red
            [2] => Orange
            [3] => Yellow
            [4] => Pink
        )
    

    If you're not interested in keeping keys values you can also use array_unique with an array_merge:

    $merged = array_unique(array_merge($a, $b)));
    print_r($merged);
    

    outputs:

    Array
    (
        [0] => Blue
        [1] => Red
        [2] => Orange
        [3] => Yellow
        [8] => Pink
    )