4

我在 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 )
)
4

2 回答 2

4

这将删除您的重复项

foreach($array as $key => $value){
     if (isset($array[$key])){
        if(isset($array[$value])){
            if($array[$value] == $key){
                unset($array[$value]);
            }
        }
     }
 }
于 2013-02-23T11:38:49.253 回答
2

这应该有效:

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

这里的工作示例

于 2013-02-23T13:03:34.757 回答