我需要将两个数组合并为一个数组,但我需要的是在它们共有的主数据之前删除(我的意思是重复值),合并时我只需要唯一的值.
我怎样才能做到这一点?
这是数组示例:
第一个阵列
array(3) {
[0]=> object(stdClass)#17 (1) {
["email"]=> string(7) "gffggfg"
}
[1]=> object(stdClass)#18 (1) {
["email"]=> string(6) "wefwef@test.it"
}
[2]=> object(stdClass)#19 (1) {
["email"]=> string(6) "wefewf"
}
}
Run Code Online (Sandbox Code Playgroud)
第二阵列
array(3) {
[0]=> object(stdClass)#17 (1) {
["email"]=> string(7) "gffggfg@test.it"
}
[1]=> object(stdClass)#18 (1) {
["email"]=> string(6) "wefwef"
}
[2]=> object(stdClass)#19 (1) {
["email"]=> string(6) "wefewf"
}
}
Run Code Online (Sandbox Code Playgroud)
Jer*_*oen 148
你可以将array_merge()功能与array_unique()功能结合起来(这两个标题都是不言自明的)
$array = array_unique (array_merge ($array1, $array2));
Run Code Online (Sandbox Code Playgroud)
Luc*_*one 11
如果我正确理解了这个问题:
$a1 = Array(1,2,3,4);
$a2 = Array(4,5,6,7);
$array = array_diff(array_merge($a1,$a2),array_intersect($a1,$a2));
print_r($array);
Run Code Online (Sandbox Code Playgroud)
返回
Array
(
[0] => 1
[1] => 2
[2] => 3
[5] => 5
[6] => 6
[7] => 7
)
Run Code Online (Sandbox Code Playgroud)
我一直在对我能想象到的所有方法进行一些基准测试。我对堆叠大量 10-20 个字符串元素的数组进行了测试,最终得到一个包含所有唯一字符串的数组。对于仅堆叠 2 个数组来说,这应该是相同的。
我发现最快的是我尝试过的最简单的事情。
$uniques = [];
foreach($manyArrays as $arr ) {
$uniques = array_unique(array_merge($uniques, $arr));
}
Run Code Online (Sandbox Code Playgroud)
我将其称为“太天真而无法工作”,因为它必须在每次迭代时对 uniques 数组进行排序。然而,这比任何其他方法都要快。在 PHP 7.3 中使用 ManyArrays 中的 500.000 个元素进行测试,每个元素包含 10-20 个字符串。
紧随其后的是这种方法,它大约慢 10%。
$uniques = [];
foreach($manyArrays as $arr ) {
foreach($arr as $v) {
if( !in_array($v, $uniques, false) ) {
$uniques[] = $v;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,第二种方法可能更好,因为它支持in_array () 的 'strict' 参数进行严格类型检查。如果设置为 true,第二个选项确实会比第一个选项慢很多(大约 40%)。第一个选项不支持严格的类型检查。