我有一大堆数据存储在一个多维数组中.示例结构如下:
Array
(
[1] => Array
(
[0] => motomummy.com
[1] => 1921
[2] => 473
)
[4] => Array
(
[0] => kneedraggers.com
[1] => 3051
[2] => 5067
)
)
我在mysql数据库中也有一个表,目前包含~80K域名.该列表每月可能会增加~10K域名.目标是将Array [] [0](域名)与mysql数据库进行比较,并返回一个仅包含唯一值的保留值(但密钥保存并不重要)的数组.
请注意,我只想比较第一个索引,而不是整个数组.
假设初始多维阵列的大小很大(超过10万到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;
});
在这一点上,一些伪代码甚至实际代码将非常有用.
最佳答案 使用DBMS!这是为了这样的东西.
>创建临时表temp {id(填充数组索引);网址(填充网址)}
>用数组的数据填充它
>理想情况下,在temp.url上创建索引
>查询数据库:
SELECT * FROM `temp` LEFT JOIN `urls`
WHERE urls.url = temp.url AND urls.url IS NULL;
(表格网址是您现有的数据)