PHP-php大数组交集处理

发布于 2017-01-02 12:00:43 字数 394 浏览 1262 评论 3

在针对用户信息处理过程中遇到这样一个问题.将基于用户的某项信息分别存于两个大数组(用于用户数据合并).预计量级均在10万级. 数据结构如下:

$area1 = array(
'test1'=>'level1',
'test2'=>'levle2',
'test3'=>'levle3',
'test4'=>'level4'
);

$area2 = array(
'test1'=>'level1',
'test2'=>'level1',
'test5'=>'level1',
'test6'=>'level1'
);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

瑾兮 2017-10-02 18:20:08

如果把两个数组先排序再归并, 时间复杂度应该是O(n*lg(n));

但是我记得php中关联数组其实就是 hash, 按key查找时间复杂度应该是O(1); 那么我们设数组为arr1, arr2; copy arr2到数组arr3; 遍历arr1, 按key去arr3中查找, 重复按你的方法处理,不重复加入arr3中; 返回arr3为结果数组. 时间复杂度应该是O(n).
本人对php仅是入门, 欢迎指正, 共同进步.

归属感 2017-06-28 16:55:37

php array_key_exists 和 in_array 时间复杂度都是 O(1), 是以空间换取时间的一种做法。

测试代码:

 <?php

$area1 = create_data();

$area2 = create_data();

$new_area = array();

foreach($area1 AS $key=>$row)
{
combine_data($key, $row);
}

foreach($area2 AS $key=>$row)
{
combine_data($key, $row);
}

print_r($new_area);
function create_data()
{
$i = 1;
while($i < 100000) {
$arr['test'.$i] = 'level'.$i;
$i ++;
}

return $arr;
}

function combine_data($key, $row)
{
global $new_area;
if(isset($new_area[$key]))
{
$new_area[$key.'1'] = $row;
$new_area[$key.'2'] = $row;
unset($new_area[$key]);
}
else
{
$new_area[$key] = $row;
}
}

10w没有啥压力的!!

晚风撩人 2017-04-02 04:16:56

我处理过1万、10万的数据集的交并集,基本上1万以内纯数组是没有压力的,超过10万的交并集,是先导入mysql数据库,直接在数据库里用sql语句来diff差异,10万条,基本上能保持在10秒左右,通过索引优化的话,时间应该可以更少,如果这还不能满足,可以考虑用先将数据存为csv,纯文本,然后用GO、C等语言写逻辑处理,处理完的数据再保存成csv文件,输出给php用。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文