PHP: crea una matriz asociativa única, clave -> valor y valor -> clave

Tengo un pequeño problema en php, que me resulta difícil de explicar con palabras. Tengo una matriz asociativa que contiene clave-valor. Me gustaría hacer una función (o si ya hay una) que tomaría una matriz como entrada y eliminaría los duplicados pero en ambos sentidos.

Por ejemplo:

En mi matriz tengo {a -> b} {a -> c} {b -> a} {b -> c} …

Desde esta vista, no parece que haya ningún duplicado, pero para mí {a -> b} y {b -> a} están duplicados. Así que me gustaría que la función lo vea como un duplicado y solo devuelva uno de ellos.

Traté de usar array_flip / array_unique para intercambiar la clave y los valores, en un bucle, pero no funcionó del todo.

¿Podrías ayudar a encontrar una manera de hacer esto, incluso si se trata de una matriz con una gran longitud? o si hay una función php que lo hace.

La ayuda sería muy apreciada, gracias.


Hay un código para ilustrar la idea:

Para una matriz que sería así:

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

Esto eliminará tus duplicados

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

Esto debería funcionar:

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

Ejemplo de trabajo aquí .

    Intereting Posts