使用php搜索大型数组中的元素

问题描述 投票:1回答:1

我有两个数组:一个是从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:数据是一个我无法控制的数组。我可以添加新密钥,如果它有帮助,但我不能改变它另一个数据结构。

php arrays
1个回答
2
投票
  1. 索引您的数组以使用比较条件作为关键。例如。: $array1 = [ 'Isaak|Newton' => [ 'uuid' => 001, 'name' => 'Isaak', 'surname' => 'Newton' ], ... ]; 确保创建一个唯一的密钥,因此两个不同的名称不会意外地连接到同一个密钥。
  2. 将两个数组一起添加: $array3 = $array1 + $array2;
  3. 再次删除键: $array3 = array_values($array3);
© www.soinside.com 2019 - 2024. All rights reserved.