4

php にちょっとした問題がありますが、言葉で説明するのは難しいと思います。キー値を含む連想配列があります。配列を入力として受け取り、重複を削除する関数を作成したいと思いますが、両方の方法があります。

例えば:

私の配列には {a -> b} {a -> c} {b -> a} {b -> c} があります ...

このビューからは重複していないように見えますが、私には {a -> b} と {b -> a} が重複しています。したがって、関数がそれを重複として認識し、そのうちの 1 つだけを返すようにしたいと思います。

ループ内で 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 に答える