PHP - 使关联数组唯一,键 - >价值和价值 - >键

时间:2013-02-23 11:34:26

标签: php unique associative-array key-value array-flip

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

2 个答案:

答案 0 :(得分:4)

这会删除你的同意

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

答案 1 :(得分: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);
}

Working example here