Sven Rautenberg: Array trennen

Beitrag lesen

Moin!

Andrerseits hatte ich genau so ein "Sortierproblem" auch schon bei (mindestens) einem anderen Projekt, wobei da keine DB zur Verfügung stand, sondern eine XML-Datei. Also hielt ich es für eine Frage, vor der sich der eine oder andere auch schonmal gestellt gesehen haben mag, so daß es eine vielleicht etwas allgemeinere Frage wäre. "Sortierprobleme" bei Arrays sind vermutlich gar nicht so selten. Und nicht immer ist sort() der Königsweg.

Egal um welches Problem es sich dreht: Dein Ansatz, zuerst mal alle Daten in ein großes Array einzulesen, um das dann zu zerteilen, weil nur ein Teilbereich im gleichen Skript weiterverarbeitet werden soll, ist blödsinnig.

Entweder steht genug Speicherplatz für dieses große Array zur Verfügung - dann kann man direkt die gewünschten Arrayelemente verarbeiten, und den Rest verwirft man am Skriptende einfach ungenutzt.

Oder man stößt auf Speicherprobleme bzw. möchte diese von Anfang an vermeiden - dann ist man gezwungen, schon direkt das Erstellen eines großen Arrays zu verhindern, und sich ausschließlich den gewünschten Datenbereich in das Array zu holen. Was dann natürlich auch die Aufgabe erübrigt, sich hinterher irgendeinen Teilbereich dieses Arrays herauszusuchen, weil es schon eine Teilmenge ist.

Und diese Grundsätze gelten vollkommen unabhängig davon, wo die Daten denn herkommen. Lediglich die Methode, nur einen Teilbereich der Daten einzulesen, unterscheidet sich: Eine Datenbank bietet in der Regel passende SQL-Befehle an, eine XML-Datei muß passend geparst werden, und sollten die Inhalte z.B. aus Dateien kommen, wären nur die relevanten Dateien einzulesen, oder nur die zu speichern, die benutzt werden sollen, so dass zu jeder Zeit nur für n+1 Dateien (n = Anzahl der zu nutzenden Dateien im Speicher) Platz existieren muß.

Was deine Aussage zu sort() angeht, stimme ich nicht zu. sort() ist, sofern man ein PHP-Array hat, sicherlich eine der schnellsten Methoden, etwas zu sortieren. Nur: Du hast hier kein Sortierproblem, denn die Daten der Zitatesammlung sind bereits sortiert.

Und schließlich sieht es nach meinem gewiß unvollkommenen Überblick so aus, als ob bei Sortiervorgängen für Arrays in allen Array-Funktionen immer "von hinten" her gezählt wird.

Sortierfunktionen bearbeiten das gesamte Array. Da wird nichts "gezählt".

Man kann einen Array numerisch oder alphabetisch neu sortieren, man kann ihn auseinanderschnipseln und neu zusammensetzen, aber bei allen Operationen "von - bis", die ich bisher wirklich kenne, wird vom letzten Wert her gezählt. Wenn du mich da korrigieren und zeigen könntest, daß ich bloß irgendwas bisher nicht richtig nachgelesen/gelernt habe, wäre der etwas harsche Ton deiner ersten Antwort deutlich entschärft.

Mal als Beispiel (und deutlich angemerkt: Hier geht es NICHT um's Sortieren):
http://www.php.net/array_slice
array_slice
(PHP 4, PHP 5)
Extrahiert einen Ausschnitt eines Arrays

Beschreibung
array array_slice ( array array, int offset [, int length [, bool preserve_keys]] )

array_slice() liefert die mittels offset und length spezifizierte Sequenz von Elementen des Arrays array.

Ist offset nicht negativ, beginnt die Sequenz bei diesem Offset in dem array. Ist offset negativ, beginnt die Sequenz offset Elemente vor dem Ende von array.

Ist length positiv, enthält die Sequenz genauso viele Elemente. Ist length negativ, enthält die Sequenz alle Elemente des Arrays von offset bis length Elemente vor dem Ende des Arrays. Ist length nicht angegeben, enthält die Sequenz alle Elemente von offset bis zum Ende von array.

Mit anderen Worten: Man nehme einfach positive Werte, und schon zählt array_slice() vom Anfang des Arrays. array_slice($array,0,3) liefert die Array-Elemente 0, 1 und 2 (3 Stück). Siehe dazu auch die Beispiele.

- Sven Rautenberg

--
My sssignature, my preciousssss!