2016-11-28 3 views
1

Ich habe 2x zeigen multidimensionalen Array wie folgt:Multidimensional assoziativen einzigartige

$x = [ 
     0=>[ 
      'a', 
      'b' 
     ], 

     1=>[ 
      'c', 
      'd' 
     ], 

     2=>[ 
      'e', 
      'f' 
     ] 
    ]; 

    $y = [ 
     0=>[ 
      'b', 
      'a' 
     ], 

     1=>[ 
      'g', 
      'h' 
     ], 

     2=>[ 
      'i', 
      'j' 
     ] 
    ]; 

Ich möchte den 2x-Arrays wie dieses

$xy = [ 
     0=>[ 
      'c', 
      'd' 
     ], 
     1=>[ 
      'e', 
      'f' 
     ], 
     2=>[ 
      'g', 
      'h' 
     ], 
     3=>[ 
      'i', 
      'j' 
     ] 
    ]; 

Wie Sie (x und y) mit einem Ausgang können fusionieren siehe $x[0] ist gleich a,b und $y[0] gleich b,a und sie sind doppelt vorhanden. Ich würde gerne wissen, ob es möglich ist für a, b genauso wie b, a, ich weiß nicht, wie ich meinen Code so aussehen lassen kann. Ich möchte mein dupliziertes Array eliminieren (a, b! = B, a). Jede Vervielfältigung ist nicht erlaubt, ist das möglich?

Antwort

0

Dies sollte Ihnen genau das geben, was Sie angefordert haben. Ich habe mehrere foreach() Schleifen verwendet, um zu testen, ob der Wert zuerst Teil des $Y Arrays ist, wenn ja, dann entfernen Sie beide Arrays mit unset(). Ich habe dann die beiden Arrays zusammengeführt, die leeren Array-Dimensionen entfernt und die Anzahl der Schlüssel zurückgesetzt.

$x = [0=>['a','b'],1=>['c','d'],2=>['e','f']]; 
$y = [ 0=>['b','a'],1=>['g','h'],2=>['i','j']]; 

foreach ($x as $key=>$value) { 

    foreach($x[$key] as $k=>$v) { 

     $search = array_search($v, $y[$key], true); //Find if value is equal to value in Y using a search 

    if ($search !== false) { //If so then remove value 

     unset($y[$key][$search]); //Remove from Array Y 
     unset($x[$key][$search]); //Remove from Array X 

     } 

    } 
} 


$newArray = array_merge($x, $y); //Merge two arrays together 

foreach($newArray as $key => $value) { //Remove empty dimensions from Array 

    if (count($newArray[$key]) <= 0) { 

     unset($newArray[$key]); 

    } 

} 


$newArray = array_values($newArray); //Re-Number Keys so there in order 


var_dump($newArray); //Array Output 

Ausgabe

{ 
    [0] => array(2) { 
     [0] => string(1) 
     "c" [1] => string(1) 
     "d" 
    }[1] => array(2) { 
     [0] => string(1) 
     "e" [1] => string(1) 
     "f" 
    }[2] => array(2) { 
     [0] => string(1) 
     "g" [1] => string(1) 
     "h" 
    }[3] => array(2) { 
     [0] => string(1) 
     "i" [1] => string(1) 
     "j" 
    } 
} 

bearbeiten

Added unset() Wert von beiden Arrays zu entfernen, wie es erwähnt, dass Sie würde NICHT gerne von doppelten Daten haben entweder das in n gezeigte Array ew-Reihe.

+0

es hilft mir so sehr, danke übrigens: D –