4

我有大量数据存储在多维数组中。一个示例结构如下:

Array
(
    [1] => Array
        (
            [0] => motomummy.com
            [1] => 1921
            [2] => 473
        )
    [4] => Array
        (
            [0] => kneedraggers.com
            [1] => 3051
            [2] => 5067
        )
)

我在 mysql 数据库中也有一个表,其中currently包含约 80K 域名。该列表将每月增长约 10K+ 域名。目标是将 Array[][0](域名)与 mysql 数据库进行比较,并返回一个包含唯一值的保留值(但密钥保留并不重要)的数组。

请注意,我只想单独比较第一个索引,而不是整个数组。

最初的多维数组被认为是巨大的(很可能从 100k 到 1000 万个结果)。获取数据库中未包含的数据的最佳方法是什么?

我现在所做的只是将数据库中的完整域列表存储到一个数组中,然后使用以下函数将初始数组中的每个值与数据库数组进行比较。这显然是非常缓慢和低效的。

// get result of custom comparison function
$clean = array_filter($INITIAL_LIST, function($elem) {
$wordOkay = true;

// check every word in "filter from database" list, store it only if not in list           
    foreach ($this->domains as $domain) {
        if (stripos($elem[0], $domain) !== false) {
            $wordOkay = false;
            break;
        }
    }

    return $wordOkay;
});

在这一点上,一些伪代码甚至实际代码会非常有帮助。

4

1 回答 1

2

使用数据库管理系统!它是为这样的东西而制作的。

  • 创建一个临时表 temp { id (用数组索引填充); url(用url填充)}

  • 用你的数组数据填充它

  • 理想情况下创建一个索引temp.url

  • 查询数据库:

    SELECT * FROM `temp` LEFT JOIN `urls`
    WHERE urls.url = temp.url AND urls.url IS NULL;
    

    (该表urls是您现有的数据)

于 2012-12-21T16:53:56.550 回答