0

オブジェクトの配列が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フォルダーにファイルをコピーすることでいくつかの解決策を見つけましたが、機能しませんでした

4

3 に答える 3

8

array_merge引数は無制限に取ることができるので、それらすべてを1つの関数呼び出しに入れることができます。

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

過去に何千ものアイテムを含む配列を問題なく使用したので、これで問題が解決するはずです。

于 2012-09-14T20:46:07.017 に答える
3

+の使用は、array_mergeを使用するよりも最適化されています

このように書いてください、それはより速くそしてより少ない資源を使用します、それはあなたが問題を抱えているようです

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

注:@ficuscrのおかげで、php array_mergeページから、注目すべき本当に重要なことは

最初の配列の要素を上書きせず、インデックスを再作成せずに、2番目の配列の配列要素を最初の配列に追加する場合は、+配列結合演算子を使用します

簡単に言うと、重複を気にせずに何かを追加したいだけの場合は、+を使用します

于 2012-09-14T20:49:02.263 に答える
0

問題はarray_mergeではなく、外部ファイルに対して行っていたcurlにありました。ファイルが大きすぎてカールできませんでしたが、メモリの問題が発生しました。php.iniのメモリを増やしても問題は解決しませんでした。

于 2012-09-15T14:44:38.050 に答える