PHP. Создайте уникальный ассоциативный массив, ключ -> значение и значение ->.

У меня есть небольшая проблема в php, которая мне трудно объяснить словами. У меня есть ассоциативный массив, содержащий ключ-значение. Я хотел бы сделать функцию (или если она уже есть), которая будет принимать массив в качестве входных данных и удалять дубликаты, но в обоих направлениях.

Например:

В моем массиве я {a -> b} {a -> c} {b -> a} {b -> c} …

Из этого представления не похоже, что есть какой-либо дубликат, но для меня {a -> b} и {b -> a} дублируются. Поэтому я хотел бы, чтобы функция рассматривала его как дубликат и возвращала только один из них.

Я попытался использовать array_flip / array_unique для обмена ключами и значениями в цикле, но не совсем работал.

Не могли бы вы найти способ сделать это, даже если это массив большой длины? или если есть php-функция, которая это делает.

Спасибо, спасибо, спасибо.


Существует код, иллюстрирующий идею:

Для массива, который будет таким:

Array ( [0] => Array ( [0] => a [1] => b) [1] => Array ( [0] => a [1] => c ) [2] => Array ( [0] => b [1] => a ) [3] => Array ( [0] => b [1] => c ) ) 

Это приведет к удалению ваших дубликатов

 foreach($array as $key => $value){ if (isset($array[$key])){ if(isset($array[$value])){ if($array[$value] == $key){ unset($array[$value]); } } } } с foreach($array as $key => $value){ if (isset($array[$key])){ if(isset($array[$value])){ if($array[$value] == $key){ unset($array[$value]); } } } } 

Это должно работать:

 function cleanArray($array) { $newArray = array(); foreach ($array as $key => $val) { if (isset($array[$val]) && $array[$val] == $key) { if (!isset($newArray[$key]) && !isset($newArray[$val])) { $newArray[$key] = $val; } unset($array[$key], $array[$val]); } } return array_merge($array, $newArray); } 

Рабочий пример здесь .