我一直在尝试比较两个数组。使用array_intersect没有问题。使用带有~5,000个值的array_diff和数组时,它可以正常工作。当我达到~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;
}
我希望它比官方的array_diff效率低,但它可以处理~10,000的数组。不幸的是,当我达到~15,000时,array_diff都失败了。
我在不同的机器上尝试了相同的代码并且运行正常,因此这不是代码或PHP的问题。在该特定服务器上某处必须设置一些限制。我知道如何绕过这个限制或改变它或者只是找出它是什么?
答案 0 :(得分:4)
遇到完全相同的问题,我真的希望在这里得到答案。
所以,我必须找到自己的方式,并提出以下丑陋的kludge,为我工作的阵列约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;
}
答案 1 :(得分:1)
在我的php.ini中:
max_execution_time = 60 ; Maximum execution time of each script, in seconds
memory_limit = 32M ; Maximum amount of memory a script may consume
这些设置或机器性能的差异是否会导致问题?您是否检查过Web服务器错误日志(如果您通过其中运行此错误日志)?
答案 2 :(得分:1)
您提到这是在浏览器中运行。尝试通过命令行运行脚本,看看结果是否不同。