2012-09-14 6 views
-1

J'ai 7 tableaux d'objets. Chaque objet contient des données. J'ai besoin de fusionner ces tableaux ensemble et je le faire avec:Comment fusionner de grands tableaux en PHP?

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

Tout fonctionnait bien jusqu'à ce que j'ai eu mon choix total de quelque chose comme 700 articles (chaque sous-réseau comptait 100 articles). Apache a cessé de répondre, je pense à cause d'un problème de mémoire à cause de tant de grands tableaux. J'ai eu des problèmes sur la 4ème ou 5ème fusion.

Quelle est la meilleure façon de les fusionner et d'éviter les erreurs?

Mise à jour:

[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. 

Ceci est mon journal d'erreur apache. Je ne trouve des solutions avec la copie des fichiers à mon dossier system32, mais ils ne marchait pas

+2

La barre "liée" sur le côté de cette page me rend triste. –

+0

pourquoi pas array_merge_recursive – FirmView

+0

@ Brendan Long Je pense que vous n'avez pas lu mon problème @FirmView Testé et même erreur – gogic1

Répondre

0

problème n'a pas été en array_merge mais boucle que je faisais au fichier externe. Fichier était trop grand pour curl comme je le vois et puis nous avons eu des problèmes de mémoire, l'augmentation de la mémoire dans php.ini n'a pas résolu le problème

8

array_merge peut prendre un nombre illimité d'arguments, de sorte que vous pouvez les mettre tous dans un appel de fonction:

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

Cela devrait résoudre le problème, puisque j'ai utilisé des tableaux avec des milliers d'éléments dans le passé sans problèmes.

+0

Aussi, '$ arrayTotal = call_user_func_array ('array_merge', $ arrayofarrays);' – Xeoncross

+0

encore je reçois le même problème, a essayé de mariner toutes les baies en même temps "Apache HTTP Le serveur a cessé de fonctionner " – gogic1

2

en utilisant + est plus optimisé puis en utilisant array_merge

écrire comme cela, il est plus rapide et utiliser moins de ressources, ce qui vous semble avoir un problème

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

Note: grâce à @ficuscr, de php array_merge page, une vraie chose importante à surveiller est

Si vous voulez ajouter des éléments de tableau du deuxième réseau au premier réseau sans écraser les éléments de la premier tableau et non ré-indexation, utilisez l'opérateur syndical tableau +

en quelques mots, si vous voulez juste ajouter des choses, sans se soucier des doublons, utilisez +

+0

Selon mon expérience, il n'y a pas beaucoup de différence entre les deux. Mais encore une fois, ce n'est que mon expérience - je n'ai pas référencé les deux options ... – alfasin

+0

vérifier ce lien http://framework.zend.com/issues/browse/ZF-3529 – Hawili

+2

Utiliser array_merge ne retourne pas les mêmes résultats comme tableau + tableau."Si vous souhaitez ajouter des éléments de tableau du second tableau au premier tableau sans écraser les éléments du premier tableau et ne pas réindexer, utilisez l'opérateur union + array". – ficuscr

Questions connexes