工作中遇到对查找指定数组,并且数组去重功能,有接近两千万的数据量,这时很多办法已经不行了,
第一次见这么大的数据,电脑卡了一天最后将结果查找出来。
1. 直接采用file函数来操作 or file_get_content() 肯定报内存溢出
注: 由于 file函数是一次性将所有内容读入内存,而php为了防止一些写的比较糟糕的程序占用太多的内存而导致系统内存不足,使服务器出现宕机,所以默认情况下 限制只能最大使用内存16M,这是通过php.ini里的memory_limit = 16M来进行设置,这个值如果设置-1,则内存使用量不受限制。当时自己没看到这个答案,文件1G多,我就设置memory_limit为2G,现在知道了直接设置为-1。
当时由于没有设置内存最大使用,所以最后出现内存溢出:Out of memory (allocated 854589440) (tried to allocate 323 bytes)
开始直接使用fopen和file_get_content,文件太大了,这两个方法不行,只能使用读取大文件的类SplFileObject,强大的类。
1.array_unique
数组去重,数组最大为16384,第一组数据有580多万,查询到要求的数据有44条,去重数组没有在第二组处理中达到想要的效果,最后显示结果大致的意思就是超出array_unique的范围,array_unique处理的唯一数组最大长度也就是16384,所以最后只能使用array_flip函数处理。
2.array_flip
通过键值对互换去重