【问题标题】:PHP : Obtain common values in 2 huge arrays [closed]PHP:在 2 个巨大的数组中获取公共值 [关闭]
【发布时间】:2013-03-12 02:56:37
【问题描述】:

我有 2 个数组,数组 AB 分别。数组 A 包含约 300,000 条字符串记录,例如

[0] => 'apple',
[1] => 'pineapple',
[2] => 'orange',
...
[299,999] => 'banana'

而数组 B 包含 100,000 个字符串值,例如

[0] => 'bamboo',
[1] => 'banana',
[2] => 'boy',
[3] => 'ball',
[4] => 'balloon',
[5] => 'bazooka',

问题是,如何找出两个数组之间的共同值?

array_intersect() 似乎是一个很有前途的功能,但我担心性能。将 2 个数组转换为文本文件并进行基于文件的比较会更好吗?还是我太担心了?

要使用的代码array_intersect()

$result_array = array_intersect($arrayA, $arrayB);

【问题讨论】:

  • 您是否测试过可能的性能?
  • 如果你有两个数组,array_intersect 可能是找到交集的最有效方法。将它们写入文件并没有多大意义。
  • 除非你打算依赖操作系统的 diff 命令(假设它可用)array_intersect 应该是你最好的选择
  • 确实是最好的解决方案。将数据写入文件将比处理内存中的数据花费更多时间:)

标签: php array-intersect


【解决方案1】:

结果基于我自己的测试,array_intersect() 是选择。它可以在不到1秒的时间内产生结果,因为它的效率是O(n·log n)

参考:https://stackoverflow.com/a/6329494/188331

【讨论】:

    【解决方案2】:

    array_intersect 函数将用于跨数组检索公共值

    但由于数组大小很大,您需要在脚本中指定配置以执行考虑性能

        set_time_limit(0);
        ini_set('memory_limit','128M');
    

    上面的代码sn-p将分别设置执行时间限制为无穷大,增加内存限制将分配更多的内存来保存大型数组

    【讨论】:

    • 如果没有损坏,请不要修复它。大约 400,000 个大约该长度的字符串大约只有 28MB。
    • @minitech - 如果它没有损坏,请再试一次。然后慢慢走开。没有人会知道。
    • @minitech:我这里是 38.5Mb,直到字符串变得真的很长$o = memory_get_usage(true); $a = array_fill(0, 300000, 'apple'); var_dump((memory_get_usage(true) - $o) / 1024 / 1024);
    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    相关资源
    最近更新 更多