Пропустить повторяющийся массив и обратный порядок массива

У меня есть этот массив. В этом я хочу пропустить значение для обратных данных.

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

Я хочу пропустить значения:

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

И я хочу, чтобы массив результатов был таким:

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

-1

Решение

$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);

демонстрация

РЕДАКТИРОВАТЬ

Согласно комментарию arbogast, это может быть еще более упрощено, исключая этапы сериализации / десериализации:

$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);

демонстрация

2

Другие решения

Попробуй это:

function filterArray($data)
{
$result = array();
array_push($result, $data[0]); //You can always add first item without performing any check
for($i=1; $i<count($data); $i++)
{
$allowAdd = true;
foreach($result as $res)
{
if(($res == $data[$i]) || ($res[0] = $data[$i][1] && $res[1] = $data[$i][0]))
{
$allowAdd = false;
break;
}
}
if($allowAdd)
array_push($result, $data[$i]);
}
return $result;
}

Теперь, когда вы звоните filterArray($data), это вернет вам отфильтрованный результат.

0