Mehrdimensionales Array sortieren

Hallo,

sorry, das ich nun poste, aber nach stundenlanger Suche ist folgende Situation für mich immer noch nicht klar:

Das Array:

$feld[0][0] = „PVC“;
$feld[1][0] = „1997“;
$feld[2][0] = „strasse1“;
$feld[0][1] = „PE“;
$feld[1][1] = „2000“;
$feld[2][1] = „strasse5“;
$feld[0][2] = „PVC“;
$feld[1][2] = „1998“;
$feld[2][2] = „strasse3“;

Sortiert werden soll nun das ganze Array nach den Strassennamen. Also soll rauskommen:

$feld[0][0] = „PVC“;
$feld[1][0] = „1997“;
$feld[2][0] = „strasse1“;

$feld[0][1] = „PVC“;
$feld[1][1] = „1998“;
$feld[2][1] = „strasse3“;

$feld[0][2] = „PE“;
$feld[1][2] = „2000“;
$feld[2][2] = „strasse5“;

Die Indizees solle numerisch sein. Ich fummle schon eine ganze Weile mut usort, komme aber nicht weiter. Weiß bitte jemand Rat?

Unter

/t/zweidimensionales-array-sortieren/5090627

habe ich eine ähnliche Aufgabe gefunden, bin aber zu blöd, dass auf mein Problem anzuwenden.

Danke im Voraus - Peter

Hi,

$feld[0][0] = „PVC“;
$feld[1][0] = „1997“;
$feld[2][0] = „strasse1“;
$feld[0][1] = „PE“;
$feld[1][1] = „2000“;
$feld[2][1] = „strasse5“;
$feld[0][2] = „PVC“;
$feld[1][2] = „1998“;
$feld[2][2] = „strasse3“;

Dazu würde ich erst die Werte die zusammen gehören in der ersten Dimension schon mal in den gleichen Index packen. Also so:

$feld[0][0] = „PVC“;
$feld[0][1] = „1997“;
$feld[0][2] = „strasse1“;
$feld[1][0] = „PE“;
$feld[1][1] = „2000“;
$feld[1][2] = „strasse5“;
$feld[2][0] = „PVC“;
$feld[2][1] = „1998“;
$feld[2][2] = „strasse3“;

Danach lässt sich das auch einfacher über USORT sortieren. Du vergleichst dann so:
function cmp($a, $b)
{
if ($a[2] == $b[2]) {

Viele Grüße,
John Wart

Hallo John Wart,

danke für Deine fixe Antwort.

Dazu würde ich erst die Werte die zusammen gehören in der
ersten Dimension schon mal in den gleichen Index packen. Also
so:

$feld[0][0] = „PVC“;
$feld[0][1] = „1997“;
$feld[0][2] = „strasse1“;
$feld[1][0] = „PE“;
$feld[1][1] = „2000“;
$feld[1][2] = „strasse5“;
$feld[2][0] = „PVC“;
$feld[2][1] = „1998“;
$feld[2][2] = „strasse3“;

Danach lässt sich das auch einfacher über USORT sortieren. Du
vergleichst dann so:
function cmp($a, $b)
{
if ($a[2] == $b[2]) {

Ja, ich weiß, was Du meinst, und damit bekomme ich es auch hin. Leider handelt es sich hier um eine gwachsene Daten- (und Programm-)struktur so dass das zwar möglich wäre, aber mit extrem viel Aufwand verbunden ist. Deshalb auch meine Frage hier im Forum.

Vielleicht gibt es doch noch eine Alternative?

Danke - Peter

Hi,

Ja, ich weiß, was Du meinst, und damit bekomme ich es auch
hin. Leider handelt es sich hier um eine gwachsene Daten- (und
Programm-)struktur so dass das zwar möglich wäre, aber mit
extrem viel Aufwand verbunden ist. Deshalb auch meine Frage
hier im Forum.

Vielleicht gibt es doch noch eine Alternative?

Woher kommen denn die Daten die du in das Array einliest?

Viele Grüße,
John Wart

Hallo,

die Daten stammen aus einem Geo-Informationssystem und werden dort durch Selektion am Bildschirm gewonnen. Allerdings sind Reihenfolge und damit der Inhalt zufällig. Z.B. 5 Datensätze Gas, gefolgt von einem aus dem Strom, dann Bäume, wieder mal Gas u.s.w… Theoretisch bräuchte man nur die Reihenfolge der Indizees vertauschen. Praktisch zieht sich das aber durch viele verschiedene Programmteile.

Viele Grüße - Peter

Hi,

die Daten stammen aus einem Geo-Informationssystem und werden
dort durch Selektion am Bildschirm gewonnen. Allerdings sind
Reihenfolge und damit der Inhalt zufällig. Z.B. 5 Datensätze
Gas, gefolgt von einem aus dem Strom, dann Bäume, wieder mal
Gas u.s.w… Theoretisch bräuchte man nur die Reihenfolge der
Indizees vertauschen. Praktisch zieht sich das aber durch
viele verschiedene Programmteile.

Auf die Schnelle ungetestet:
function sortNew($a, $b) {
if ($a[2]

Hallo und vielen Dank!

Der erste Versuch hat funktioniert. Nächste Woche werde ich es auf dem heißen Datenbestand testen.

Nochmals herzlichen Dank - Peter