Hello,
Es gibt jedoch auch (mindestens) einen Anwendungsfall, der mit Spaltenarray nicht zu lösen ist, jedenfalls nicht auf die einfache Ein-Funktionsaufruf-Sortiermethode - wenn ich jetzt keinen Denkfehler habe. Man kann zwar beispielsweise das Ortsarray absteigend und das Namensarray aufsteigend sortiert vorliegen haben. Das Anwenden von asort() auf eines der Spaltenarrays kann aber bei gleichen Werten nicht in die anderen Arraya schauen, um anhand der anderen Spalten eine eindeutige Reihenfolge zu ermitteln. Für den Zweck benötigt man dann doch wieder eine benutzerdefinierte Vergleichsfunktion und der Spaltenarray-Vorteil ist hin.
Entweder man benutzt array_multisort() http://de.php.net/manual/en/function.array-multisort.php dafür, dann gehen aber die numerischen Schlüssel kaputt. Die Zusammengehörigkeit der Werte der sortierten Spalten bleibt allerdings erhalten.
Will man die Schlüssel auf jeden Fall erhalten (was normal wäre), würde man der Einfachheit halber eine zusätzliche Spalte eingefügen, die alle zu sortirenden Werte enhält. Die kann man dann auch wieder ganz einfach sortieren. Bei einem DBMS enthält ein Index über mehrere Spalten auch meistens alle Spaltenwerte (concatiniert).
Die Vorteile beschränken sich nicht nur aufs Sortieren, sondern auch auf
- Summe http://de.php.net/manual/en/function.array-sum.php
- Maximum http://de.php.net/manual/en/function.max.php
- Minimum http://de.php.net/manual/en/function.min.php
- Produkt http://de.php.net/manual/en/function.array-product.php
Seziell für ChrisB:
Ich habe außerdem die vier Grundfunktionen für den Zugriff auf ein derartiges Spaltenarray hier schon mehrfach publiziert. Man kann also nicht "aus Versehen" die Daten durcheinanderbringen.
http://forum.de.selfhtml.org/archiv/2009/5/t187244/#m1244374
Die Funktionen sind universell, man muss sich sich also nur ein einziges Mal in seine Library aufnehmen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg