2016-12-13 5 views
1

Es gibt viele Fragen, die bereits über das Entfernen von Duplikaten oder spezifischen Werten aus multidimensionalen Arrays geschrieben wurden, aber ich kann anscheinend nichts finden, wenn man ein multidimensionales Array mit sich selbst vergleicht Entfernen der Valuse-Base für die Werte innerhalb des Arrays.PHP vergleicht multidimensionales Array mit sich selbst und entfernt Arrays basierend auf Werten in verschachtelten Arrays

Im folgenden Beispiel möchte ich alle Arrays entfernen, bei denen Array [0] und Array [2] vertauscht sind. Im folgenden Beispiel für die Arrays [0] (A, B) und [3] (B, A) würde [3] entfernt. Für die Arrays [1] (B, C) und [2] (C, B) würde [2] entfernt werden.

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

soll Das resultierende Array

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

Antwort

0

Gehen Sie durch dieses Array und überprüfen Sie jedes Element gegen alle anderen Elemente, und wenn Bedingungen erfüllt sind, dann deaktivieren Sie diese anderen Elemente.

$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

Eine Möglichkeit wäre, nur einen temporären Container zu erstellen, wenn es zu prüfen, vorhanden ist, es dann von dort filtern:

$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

Verwandte Themen