Mailinglisten-Archive |
Hallo Liste, ich habe mal wieder ein kleines Problemchen ;) ich habe ein 2dimensionales Array $defined_arrays. In diesem Array stehen widerum eine unbekannte Anzahl von Einzel-Arrays (maximal 4!). Nun möchte ich möglichst schnell und leistungsstark die Werte von $defined_arrays rausfinden, welche in jedem Einzel-Array vorhanden sind. Pro Array kommt ein Wert auch definitiv nur einmal vor. Der von mir verwendete Code funktioniert, aber bei großen Einzel-Arrays (>1000 Werte) bekomme ich einen Timeout :(((( Hier der Code : -- schnipp --- function cmp ($a, $b) if ($a == $b) return 0; return ($a < $b) ? -1 : 1; } $smallest_array = $defined_arrays[$smallest_index]; usort ($smallest_array, "cmp"); reset ($smallest_array); $anz_defined_arrays = count($defined_arrays); $x=0; echo count($smallest_array), "<BR><BR>"; while ($x<300) { $match_or_not = $smallest_array[$x]; $count = 0; for ($y=0;$y<$anz_defined_arrays;$y++) { $anz_max_durchlaeufe = count($defined_arrays[$y]); if ($anz_max_durchlaeufe > 300) { $anz_max_durchlaeufe=300; } for ($z=0;$z<$anz_max_durchlaeufe;$z++) { if ($defined_arrays[$y][$z] == $match_or_not) { $count++; break; } } } if ($count == $anz_defined_arrays) { $matches[] = $match_or_not; } if ($smallest_size == $x) { break; } $x++; } --- schnapp --- in dem eindimensionalen Array $matches stehen die "unique values", also die Werte, die in ALLEN Einzelarrays vorkommen. Um dem Timeout zuvorzukommen habe ich an bestimmten Stellen die Schleifendurchläufe auf 300 begrenzt, aber diese Lösung ist meines Erachtens nicht befriedigend. Meine Frage: Hat einer sowetwas schon gemacht, oder kann mir jemand bei der Optimierung helfen???? Das dumme an der Sache ist, dass mein Provider sich momentan nicht dazu überreden lässt auf PHP4 upzugraden, was die Sache zu einem verzwickten Unterfangen macht. Bin für jede Hilfe dankbar. Greetingz, Christoph
php::bar PHP Wiki - Listenarchive