我有两个数组:一个是从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:数据是一个我无法控制的数组。我可以添加新密钥,如果它有帮助,但我不能改变它另一个数据结构。
$array1 = [
'Isaak|Newton' => [
'uuid' => 001,
'name' => 'Isaak',
'surname' => 'Newton'
],
...
];
确保创建一个唯一的密钥,因此两个不同的名称不会意外地连接到同一个密钥。$array3 = $array1 + $array2;
$array3 = array_values($array3);