tedlemegba
abgemeldet
- 20 April 2006
- 2.729
- 175
Hallo zusammen!
Ich darf mal wieder ein Array sortieren.. auf diese Art und Weise musste ich das (zum Glück?) bisher noch nie machen. Das Array (im Folgenden $array) hat folgende Struktur:
Ich hab also in der ersten Dimension einen assoziativen Schlüssel (ein Dateiname). Als Value enthält das Element ein weiteres Array mit einem "gemischten" Schlüssel (von mir aus einigen wir uns auch auf assoziativ.. sind praktisch doppelte Schlüssel vorhanden wie man das von mysql_fetch_array($query) unter Umständen auch kennt; Werte kommen von stat($file)) und bestimmten Werten (falls es interessiert scheinen die ja alle vom Typ Integer zu sein.. ist aber wohl eher unwichtig/egal). Soweit klar?
Auf jeden Fall möchte ich jetzt verschiedene Sortierungen (die Schlüssel sollen dabei immer beibehalten werden) durchführen und dann eine Liste
Danke!
Edit: okay... Beispiel 212 und Beispiel 213 zeigen schon mal Probleme einer total anderen Struktur. So wird mein Problem nicht schnell gelöst. Vielleicht gibt's auch eine viel einfachere Methode.. die mir im Moment natürlich nicht bekannt ist!
[Denn ich will ja anhand eines "inneren Wertes" ein Element der ersten Dimension "verschieben"/sortieren und nicht "innere Werte" in einzelnen Elementen der ersten Dimension.]
Edit: usort(...) könnte es vielleicht doch tun mit einer eigenen Vergleichsfunktion.. jaaa das probier' ich mal eben!
Hm.. okay tut soweit, dass es mir richtig sortiert, aber meine Schlüssel kaputt/verloren gehen.. mal schauen, ob sich das fixen lässt:
Edit:
Klingt gut!
Und tut!
Erledigt.. aber nehme gerne neue/bessere Lösungsvorschläge/Kritik/.. entgegen! 
Ich darf mal wieder ein Array sortieren.. auf diese Art und Weise musste ich das (zum Glück?) bisher noch nie machen. Das Array (im Folgenden $array) hat folgende Struktur:
PHP:
[foo.bak] => Array
(
[0] => 769
[1] => 11031158
[2] => 33188
[3] => 1
[4] => 33
[5] => 33
[6] => -1
[7] => 42666
[8] => 1184421940
[9] => 1172002371
[10] => 1179037986
[11] => -1
[12] => -1
[dev] => 769
[ino] => 11031158
[mode] => 33188
[nlink] => 1
[uid] => 33
[gid] => 33
[rdev] => -1
[size] => 42666
[atime] => 1184421940
[mtime] => 1172002371
[ctime] => 1179037986
[blksize] => -1
[blocks] => -1
)
[bar.dat] => Array
(
[0] => 769
[1] => 11031036
[2] => 33188
[3] => 1
[4] => 33
[5] => 33
[6] => -1
[7] => 860
[8] => 1184421924
[9] => 1164286416
[10] => 1179037979
[11] => -1
[12] => -1
[dev] => 769
[ino] => 11031036
[mode] => 33188
[nlink] => 1
[uid] => 33
[gid] => 33
[rdev] => -1
[size] => 860
[atime] => 1184421924
[mtime] => 1164286416
[ctime] => 1179037979
[blksize] => -1
[blocks] => -1
)
[alice.mat] => Array
(
[0] => 769
[1] => 11026505
[2] => 33188
[3] => 1
[4] => 33
[5] => 33
[6] => -1
[7] => 25957
[8] => 1184421942
[9] => 1183580443
[10] => 1183580443
[11] => -1
[12] => -1
[dev] => 769
[ino] => 11026505
[mode] => 33188
[nlink] => 1
[uid] => 33
[gid] => 33
[rdev] => -1
[size] => 25957
[atime] => 1184421942
[mtime] => 1183580443
[ctime] => 1183580443
[blksize] => -1
[blocks] => -1
)
...
Ich hab also in der ersten Dimension einen assoziativen Schlüssel (ein Dateiname). Als Value enthält das Element ein weiteres Array mit einem "gemischten" Schlüssel (von mir aus einigen wir uns auch auf assoziativ.. sind praktisch doppelte Schlüssel vorhanden wie man das von mysql_fetch_array($query) unter Umständen auch kennt; Werte kommen von stat($file)) und bestimmten Werten (falls es interessiert scheinen die ja alle vom Typ Integer zu sein.. ist aber wohl eher unwichtig/egal). Soweit klar?
Auf jeden Fall möchte ich jetzt verschiedene Sortierungen (die Schlüssel sollen dabei immer beibehalten werden) durchführen und dann eine Liste
- sortiert nach den Dateinamen erstellen
Ist kein Problem, denn da tun ksort($array) und krsort($array) ihren Dienst!
- sortiert nach Schlüsseln des inneren Arrays erstellen
zum Beispiel also alle Elemente von $array nach size sortieren
Das bereitet mir bisher Kopfzerbrechen... ich hab' zwar array_multisort(...) entdeckt und bin mir sehr sicher, dass es die richtige/passende Funktion für diese Aufgabe ist, wie man die jetzt aber verwendet ist mir leider noch nicht so klar - könnt ihr mir da vielleicht helfen?
Danke!
Edit: okay... Beispiel 212 und Beispiel 213 zeigen schon mal Probleme einer total anderen Struktur. So wird mein Problem nicht schnell gelöst. Vielleicht gibt's auch eine viel einfachere Methode.. die mir im Moment natürlich nicht bekannt ist!
Edit: usort(...) könnte es vielleicht doch tun mit einer eigenen Vergleichsfunktion.. jaaa das probier' ich mal eben!
Hm.. okay tut soweit, dass es mir richtig sortiert, aber meine Schlüssel kaputt/verloren gehen.. mal schauen, ob sich das fixen lässt:
PHP:
function cmp($a, $b)
{
if ($a['size'] == $b['size']) {
return 0;
}
return ($a['size'] < $b['size']) ? -1 : 1;
}
usort($array, "cmp");
Edit:
PHP Manual schrieb:uasort
(PHP 4, PHP 5)
uasort — Sortiert ein Array mittels einer benutzerdefinierten Vergleichsfunktion und behält Indexassoziationen bei.
Klingt gut!
Und tut!
Zuletzt bearbeitet: