2016-11-28 13 views
1

私は以下のように2倍多次元配列のを示しています多次元連想ユニーク

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

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

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

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

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

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

は私がすることができますように、この

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

のような出力で2回配列の(xとy)をマージしたいです$x[0]a,bに等しく、$y[0]b,aに等しく、それらは複製される。私はそれが可能であるかどうか、bと同じようにbを知りたいのですが、私のコードをこのように見えるようにする方法はわかりません。私は複製された配列(a、b!= b、a)を削除したい。複製は許可されていませんが、可能ですか?

答えて

0

これはあなたが要求したものを正確に与えるはずです。私は、値が最初に$Y配列の一部であるかどうかをテストするために複数のforeach()ループを使用しました。もしそうなら、両方の配列からunset()を使用して削除してください。次に、2つの配列を結合し、空の配列の次元を削除し、キーの数をリセットしました。

$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 

出力

{ 
    [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" 
    } 
} 

編集

追加unset()あなたがませはから重複データを持っているしたいと述べていますよう両方の配列から値を削除しますいずれかの配列がn ewアレイ。

+0

その助けてくれてありがとうbtw:D –

関連する問題