Search code examples
phparraysmultidimensional-arrayarray-reverse

Skip repeating array and reverse order of the array


I have this array. In this I want to skip the value for reverse data.

$data = array(
    array(2, 1),
    array(1, 2),
    array(1, 2),
    array(2, 1),
    array(2, 3),
    array(3, 2),
    array(4, 5)
);

I want to skip the values:

array(1,2)
array(1,2)
array(2,1)
array(3,2)

And I want the result array to be like this:

array(
    array(2, 1),
    array(2, 3),
    array(4, 5)
);

Solution

  • $data = [[2,1], [1,2], [1,2], [2,1], [2,3], [3,2], [4,5]];
    
    $data = array_map(
        function($value) {
            sort($value);
            return serialize($value);
        },
        $data
    );
    
    $data = array_unique($data);
    $data = array_map('unserialize', $data);
    array_walk($data, 'sort');
    
    var_dump($data);
    

    Demo

    EDIT

    As per arbogast's comment, this can be simplified even further, eliminating the serialize/unserialize steps:

    $data = [[2,1], [1,2], [1,2], [2,1], [2,3], [3,2], [4,5]];
    
    array_walk($data, 'sort');
    $data = array_unique($data, SORT_REGULAR);
    
    var_dump($data);
    

    Demo