包含关联数组的两个数组的并集,同时仅保留唯一行

kn3*_*n3l 5 php arrays duplicates multidimensional-array array-merge

我想要 Union 2 数组$A$B示例:

$A = Array(
    0=>array(
            'lable' =>"label0",
            'id_poste'=>1,
            'id_part'=>11
    ),
    1=>array(
            'lable' =>"label1",
            'id_poste'=>2,
            'id_part'=>12
            ),
    2=>array(
            'lable' =>"label2",
            'id_poste'=>3,
            'id_part'=>13
    ),
    3=>array(
            'lable' =>"label3",
            'id_poste'=>4,
            'id_part'=>14
            )
);

$B = Array(
    0=>array(
            'lable' =>"label0",
            'id_poste'=>1,
            'id_part'=>11
    ),
    1=>array(
            'lable' =>"label1_X",
            'id_poste'=>2,
            'id_part'=>12
            ),
    2=>array(
            'lable' =>"label2",
            'id_poste'=>3,
            'id_part'=>13
    ),
    3=>array(
            'lable' =>"label3_X",
            'id_poste'=>4,
            'id_part'=>14
            )
);
Run Code Online (Sandbox Code Playgroud)

这两个数组之间的并集结果将是

/*
$result => Array(
    0=>array(
            'lable' =>"label0",
            'id_poste'=>1,
            'id_part'=>11
    ),
    1=>array(
            'lable' =>"label1",
            'id_poste'=>2,
            'id_part'=>12
            ),
    2=>array(
            'lable' =>"label1_X",
            'id_poste'=>2,
            'id_part'=>12
            )       
    3=>array(
            'lable' =>"label2",
            'id_poste'=>3,
            'id_part'=>13
    ),
    4=>array(
            'lable' =>"label3",
            'id_poste'=>4,
            'id_part'=>14
            ),
    5=>array(
            'lable' =>"label3_X",
            'id_poste'=>4,
            'id_part'=>14
            )
);
*/
Run Code Online (Sandbox Code Playgroud)

我尝试过:

$C = $A+$B;
echo '<pre>';
print_r($C);
echo '</pre>'
Run Code Online (Sandbox Code Playgroud)

但结果却不是我所期望的?有人可以帮忙吗?

谢谢

EIDT:

如果使用array_merge($A, $B);

Array
(
[0] => Array
    (
        [lable] => label0
        [id_poste] => 1
        [id_part] => 11
    )

[1] => Array
    (
        [lable] => label1
        [id_poste] => 2
        [id_part] => 12
    )

[2] => Array
    (
        [lable] => label2
        [id_poste] => 3
        [id_part] => 13
    )

[3] => Array
    (
        [lable] => label3
        [id_poste] => 4
        [id_part] => 14
    )

[4] => Array
    (
        [lable] => label0
        [id_poste] => 1
        [id_part] => 11
    )

[5] => Array
    (
        [lable] => label1_X
        [id_poste] => 2
        [id_part] => 12
    )

[6] => Array
    (
        [lable] => label2
        [id_poste] => 3
        [id_part] => 13
    )

[7] => Array
    (
        [lable] => label3_X
        [id_poste] => 4
        [id_part] => 14
    )
Run Code Online (Sandbox Code Playgroud)

就像我们在这里看到的那样,数组是重复的:所以我们使用array_unique但是我们仍然收到错误或警告。

Array to string conversion in C:\Program Files\EasyPHP-12.1\www\PHP\array_union.php on line 86

art*_*gis 6

我得到了一个有点棘手的解决方案。我将合并 A 及其与 B 的差异。为了确定这种差异,我使用 array_udiff:我认为这很棘手,因为它依赖于 lable key 的标识。

$C = array_merge($A, 
            array_udiff($B, $A, 
                        function($a,$b){
                            return strcmp($a['lable'],$b['lable']);
                        }
           )
);
Run Code Online (Sandbox Code Playgroud)