多维关联唯一

时间:2016-11-28 14:37:02

标签: php arrays

我有2x多维数组'如下所示:

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

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

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

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

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

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

我想将2x数组' s(x和y)与这样的输出合并

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

如您所见,$x[0]等于a,b$y[0]等于b,a并且它们是重复的。我想知道a,b是否可能与b一样,a,我不知道如何让我的代码看起来像这样。我想消除我的重复数组(a,b!= b,a)。不允许任何重复,这可能吗?

1 个答案:

答案 0 :(得分:0)

这应该可以准确地告诉您所要求的内容。我使用了多个foreach()循环来测试该值是否首先是$Y数组的一部分,如果是,则使用unset()从两个数组中删除。然后我将两个数组合并在一起,删除了空数组维度并重置密钥数。

$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()以从两个数组中删除值,因为它提到您 NOT 喜欢从新数组中显示的任一数组中重复数据。 < / p>