如何在PHP中合并大型数组


How to merge large arrays in PHP?

我有7个对象数组。每个对象都包含数据。我需要将这些阵列合并在一起,并使用

$arrayTotal = $array1;
$arrayTotal = array_merge($arrayTotal,$array2)
$arrayTotal = array_merge($arrayTotal,$array3)
$arrayTotal = array_merge($arrayTotal,$array4)
...

所有的工作都很好,直到我有了大约700个项目的总数组(每个子数组有100个项目)。Apache停止响应,我想是因为内存问题,因为有太多的大数组。我在第4次或第5次合并时遇到了问题。

合并它们并避免错误的最佳方法是什么?

更新:

[Sat Sep 15 10:17:36 2012] [notice] Apache/2.2.21 (Win32) PHP/5.3.9 configured -- resuming normal operations
[Sat Sep 15 10:17:36 2012] [notice] Server built: Sep 10 2011 11:34:11
[Sat Sep 15 10:17:36 2012] [notice] Parent: Created child process 3908
[Sat Sep 15 10:17:36 2012] [notice] Child 3908: Child process is running
[Sat Sep 15 10:17:36 2012] [notice] Child 3908: Acquired the start mutex.
[Sat Sep 15 10:17:36 2012] [notice] Child 3908: Starting 64 worker threads.
[Sat Sep 15 10:17:36 2012] [notice] Child 3908: Starting thread to listen on port 8080.
[Sat Sep 15 10:17:53 2012] [notice] Parent: child process exited with status 3221225477 -- Restarting.

这是我的apache错误日志。我确实找到了一些将文件复制到system32文件夹的解决方案,但它们不起作用

array_merge可以接受无限数量的参数,因此您可以将它们全部放在一个函数调用中:

$arrayTotal = array_merge($array1,$array2,$array3...);

这应该可以解决问题,因为我过去使用过数千个项目的数组,没有任何问题。

使用+比使用array_merge 更优化

这样写,它更快,使用更少的资源,这似乎是的问题

$arrayTotal = $array1 + $array2 + $array3 + $array4; //add as much as you need :)

注意:多亏了php array_merge页面上的@ficuscr,真正值得关注的是

如果您想将第二个数组中的数组元素附加到第一个数组,同时不覆盖第一个数组的元素,也不重新索引,请使用+数组联合运算符

简而言之,如果您只想附加内容,而不关心重复项,请使用+

问题不在array_merge中,而是在我对外部文件所做的curl中。在我看来,文件对curl来说太大了,然后我们遇到了内存问题,在php.ini中增加内存并不能解决

问题

在峰值内存使用方面,与array_merge($a, $b)[...$a, ...$b]相比,array_push($a, ...$b)使用的内存最少。峰值内存使用比较:

  1. CCD_ 5=>peakMemory=$aMemory+$b Memory
  2. CCD_ 6=>peakMemory=2*$aMemory+$b Memory
  3. CCD_ 7=>peakMemory=2*$aMemory+$b Memory

此外,如果使用array_merge省略号运算符来减少峰值内存使用量,请确保将返回值分配给最大的数组。