Moin!
Tag zusammen,
Sitze grad an was echt blödem und komme nicht auf die Lösung. Ich weiss das man sowas vllt nicht machen sollte aber das ist gerade notwendig.
Du hast hier ein klassisches XY-Problem vorliegen: Du glaubst, dass du Problem X hast, und dass Y die Lösung wäre, aber irgendwie nicht funktioniert, und fragst nun für Y nach Hilfe.
Die Lösungen für Y führen dich aber nach meinem Ermessen nicht ans Ziel. Warum fragst du nicht nach einer Lösung für X?
Folgendes Problem:
Das ist kein Problem, sondern ein Algorithmus. Was soll der machen? Also was soll fachlich dabei rauskommen? Box-Muller-Zufallsmethode hast du schon erwähnt. Warum willst du alle Elemente des Arrays mit allen anderen Elementen des Arrays vergleichen? Was macht die Funktion gauss()?
foreach($arr as key_1 => $value_1) { foreach($arr as key_2 => $value_2) { if($key_1 != $key_2) { if($value_1['x'] === $value_2['x'] AND $value_1['y'] === $value_2['y'] AND $value_1['z'] === $value_2['z']) { $new_x = gauss($radius,$center['x'],1); $new_y = gauss($radius,$center['y'],1); $new_z = gauss($radius,$center['z'],1); reset($arr); } } }
Das Problem mit deinem Algorithmus ist, dass er quadratische Laufzeit aufweist. Selbst wenn nichts zu tun ist, muss er für eine Anzahl i von Arrayelementen genau i^2 Schleifendurchläufe machen. Kein Wunder, dass da bei 2 Millionen Arrayeinträgen nichts mehr geht.
Allerdings gibt es eine sehr wichtige Eigenschaft: Das, was zu tun ist, soll nur passieren, wenn die Werte für X und Y und Z gleich sind. Man kann also grundsätzlich das Array mindestens mal nach X, lieber aber nach allen drei Werten sortieren, weil dann die Abfrage "nur noch" prüfen muss, ob das Arrayelement i dieselben Werte für X, Y und Z hat, wie das Arrayelement i+1. Und das wären dann keine zwei ineinander verschachtelte Schleifen mit quadratischer Laufzeit, sondern nur noch EINE Schleife mit linearer Laufzeit.
Da du aber leider nicht sagst, was das Array eigentlich enthält, musst du halt mit der enorm schnell wachsenden quadratischen Laufzeit leben.
Grüße Sven