У меня есть небольшая проблема в 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); }
Рабочий пример здесь .