2016-12-13 4 views
1

多次元配列から重複または特定の値を削除することに関してはすでに多くの質問がありますが、多次元配列をそれ自身と比較する際には何も見つかりません配列内の値に対するvaluseベースを削除します。PHPは多次元配列をそれ自身と比較し、入れ子配列内の値に基づいて配列を削除します

以下の例では、配列[0]と配列[2]が逆の配列を削除したいと考えています。したがって、配列[0](A、B)と[3](B、A)の下の例では、[3]が削除されます。配列[1](B、C)と[2](C、B)では[2]が削除されます。

Array (
[0] => Array ([0] => A [1] => X [2] => B) 
[1] => Array ([0] => C [1] => Y [2] => B) 
[2] => Array ([0] => B [1] => V [2] => C) 
[3] => Array ([0] => A [1] => Z [2] => A) 
[4] => Array ([0] => B [1] => W [2] => A) 
[5] => Array ([0] => B [1] => V [2] => B)) 

結果の配列は、あるべき

Array (
[0] => Array ([0] => A [1] => X [2] => B) 
[1] => Array ([0] => C [1] => Y [2] => B) 
[2] => Array ([0] => A [1] => Z [2] => A) 
[3] => Array ([0] => B [1] => V [2] => B)) 

答えて

0

この配列を調べて、他のすべての要素に対してすべての要素をチェックします。条件が満たされたら、他の要素を設定解除します。

$array = [ 
    ['A', 'X', 'B'], 
    ['C', 'Y', 'B'], 
    ['B', 'V', 'C'], 
    ['A', 'Z', 'A'], 
    ['B', 'W', 'A'], 
    ['B', 'V', 'B'], 
]; 

array_walk($array, function (array $a1, int $k1) use (&$array) { 
    foreach ($array as $k2 => $a2) { 
     if ($k1 !== $k2 and $a1[0] === $a2[2] and $a1[2] === $a2[0]) { 
      unset($array[$k2]); 
     } 
    } 
}); 
0

一つの方法は、ちょうどその、それが存在するかどうかを確認するために、一時的なコンテナを作成し、そこからそれをフィルタリングするために、次のようになります。

$temp = []; // temporary container 
$new_arr = array_filter($arr, function($e) use(&$temp) { 
    $orig = $e; // create an original copy 
    sort($e); // sort 
    if(!in_array($e, $temp)) { 
     $temp[] = $e; // push if doesn't exist yet 
     return $orig; // return the orig 
    } 
}); 

Out

関連する問題