我有两个数组:一个是从mySQL数据库中提取的数据生成的,数据超过100k。每个元素都是一个关联数组。
现在,我需要从第二个数组中获取每个元素并在第一个数组中搜索它(使用某些键进行比较),如果它不存在,则添加它。
示例:
$array1 = [
[
'uuid' => 001,
'name' => 'Isaak',
'surname' => 'Newton',
],
[
'uuid' => 002,
'name' => 'George',
'surname' => 'Washington',
],
[
'uuid' => 003,
'name' => 'Harry',
'surname' => 'Potter',
],
[
'uuid' => 004,
'name' => 'John',
'surname' => 'Doe',
],
[
'uuid' => 005,
'name' => 'Jack',
'surname' => 'Daniels',
],
[
'uuid' => 007,
'name' => 'Donnie',
'surname' => 'Trump',
],
[
'uuid' => 008,
'name' => 'Donnie',
'surname' => 'Trump',
]
];
然后,第二个数组
$array2 = [
[
'name' => 'Carl',
'surname' => 'Sagan',
],
[
'name' => 'Giorgio',
'surname' => 'Armani',
],
[
'name' => 'Harry',
'surname' => 'Potter',
]
];
在这个例子中,Carl Sagan和Giorgio Armani将被添加到$ array1。目前我正在循环$ array1,查看是否存在具有相同名称和姓氏的元素。如果没有,则添加它。
问题是,根据我拥有的值的数量,脚本需要2个多小时才能完成。
我用来检查元素是否已存在的函数是:
foreach ($array2 as $array2Element)
foreach ($array1 as $array1Element) {
if ($array1Element['name'] == $array2Element['name'] &&
$array1Element['surname'] == $array2Element['surname']
) {
// Both keys matched, the element already exists!
$found = true;
break;
}
}
}
有没有更有效的方法来做到这一点?
PS:数据是一个我无法控制的数组。如果有帮助,我可以添加新密钥,但我无法将其更改为另一种数据结构。
答案 0 :(得分:2)
索引两个数组以使用比较条件作为键。 E.g:
$array1 = [
'Isaak|Newton' => [
'uuid' => 001,
'name' => 'Isaak',
'surname' => 'Newton'
],
...
];
确保您创建了一个唯一的密钥,因此两个不同的名称不会意外地连接到同一个密钥。
将两个数组一起添加:
$array3 = $array1 + $array2;
再次删除密钥:
$array3 = array_values($array3);