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
我得到了一个有点棘手的解决方案。我将合并 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)