gpt4 book ai didi

php - 使用 array_diff 处理大型数组

转载 作者:可可西里 更新时间:2023-11-01 12:54:52 24 4
gpt4 key购买 nike

我一直在尝试比较两个数组。使用 array_intersect 没有问题。当使用 array_diff 和具有 ~5,000 个值的数组时,它可以工作。当我达到约 10,000 个值时,脚本会在我到达 array_diff 时终止。打开 error_reporting 没有产生任何结果。

我尝试创建自己的 array_diff 函数:

function manual_array_diff($arraya, $arrayb) {
foreach ($arraya as $keya => $valuea) {
if (in_array($valuea, $arrayb)) {
unset($arraya[$keya]);
}
}
return $arraya;
}

来源:How does array_diff work?

我预计它的效率会低于官方的 array_diff,但它可以处理大约 10,000 个数组。不幸的是,当我达到 ~15,000 时,两个 array_diffs 都失败了。

我在另一台机器上尝试了相同的代码,它运行良好,所以这不是代码或 PHP 的问题。该特定服务器上的某处必须设置一些限制。知道如何绕过该限制或更改它或只是找出它是什么吗?

最佳答案

遇到了完全相同的问题,我真的很希望在这里得到答案。

因此,我必须找到自己的解决方法,并想出了以下丑陋的拼凑方法,它对我来说适用于包含大约 50,000 个元素的数组。根据您的观察,array_intersect 有效但 array_diff 无效。

迟早这也会溢出资源限制,在这种情况下,有必要对数组进行分块并处理更小的位。当我们到达那座桥时,我们将穿过那座桥。

function new_array_diff($arraya, $arrayb) {
$intersection = array_intersect($arraya, $arrayb);
foreach ($arraya as $keya => $valuea) {
if (!isset($intersection[$keya])) {
$diff[$keya] = $valuea;
}
}

return $diff;
}

关于php - 使用 array_diff 处理大型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2985799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com