zoukankan      html  css  js  c++  java
  • 【PHP】array_unique与array_array_flip

    工作中遇到对查找指定数组,并且数组去重功能,有接近两千万的数据量,这时很多办法已经不行了,

    第一次见这么大的数据,电脑卡了一天最后将结果查找出来。

    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

    通过键值对互换去重

  • 相关阅读:
    USACO Name That Number
    USACO Milking Cows
    hdu 1540 Tunnel Warfare (线段树维护左右最长连续区间)
    Contest 1
    JNU周练1026
    树形DP
    Python和C扩展实现方法
    Python模拟C++输出流
    SkipList算法实现
    Python 迭代dict 效率
  • 原文地址:https://www.cnblogs.com/Horsonce/p/8352852.html
Copyright © 2011-2022 走看看