WinFuture-Forum.de: Php Array Sortieren - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Php Array Sortieren


#1 Mitglied ist offline   Party 

  • Gruppe: aktive Mitglieder
  • Beiträge: 501
  • Beigetreten: 16. Januar 04
  • Reputation: 0

geschrieben 06. November 2008 - 08:36

Hallo Leute hab ein kleines problemchen
   Array
		(
			[frachtid] => 6
			[fahrzeug] => fracht
			[stellplaetze] => 8
			[abland] => D
			[abplz] => 74564
			[abort] => Crailsheim
			[abvon] => 1151222400
			[abbis] => 1151225100
			[anland] => D
			[anplz] => 74545
			[anort] => SHA - Michelfeld
			[anvon] => 1151280900
			[anbis] => 1151301600
		)


Ich hab das obige Array und müsste es nach fahrzeug und nach Abland sortieren. weis leider nicht genau wie ich das mache das es mir nur nach diesen feldern sortiert. könnt ihr mir kurz helfen?

vielen lieben dank für eure bemühungen.
0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 06. November 2008 - 08:57

Das sollte mit Hilfe von usort und eines Callbacks funktionieren

Ich gehe mal davon aus, dass du ein Multidimensionales Array verwendest, sonst wäre eine Sortierung unlogisch. Ich gehe von folgender Struktur aus:
Array (
[0] => Array
		(
			[frachtid] => 6
			[fahrzeug] => fracht
			[stellplaetze] => 8
			[abland] => D
			[abplz] => 74564
			[abort] => Crailsheim
			[abvon] => 1151222400
			[abbis] => 1151225100
			[anland] => D
			[anplz] => 74545
			[anort] => SHA - Michelfeld
			[anvon] => 1151280900
			[anbis] => 1151301600
		)
[1] => Array
		(
			[frachtid] => 66
			[fahrzeug] => fahrzeug
			[stellplaetze] => 88
			[abland] => D
			[abplz] => 12345
			[abort] => Musterstadt
			[abvon] => 1151222600
			[abbis] => 1151225600
			[anland] => D
			[anplz] => 12345
			[anort] => SHA - Musterfeld
			[anvon] => 1151281900
			[anbis] => 1151306600
		)
)

Der Callback könnte dann wie folgt aussehen:
function cmpByFahrzeug($a, $b) {
	return strcmp($a['fahrzeug'], $b['fahrzeug']);
}

Anschließend usort aufrufen
usort ($ar, "cmpByFahrzeug");

0

#3 Mitglied ist offline   Party 

  • Gruppe: aktive Mitglieder
  • Beiträge: 501
  • Beigetreten: 16. Januar 04
  • Reputation: 0

geschrieben 06. November 2008 - 09:37

danke für deine antwort:

ja es ist ein mehrdimensionales array.

hast mir zwar schon sehr sehr fest weitergeholfen aber
return strcmp($a['fahrzeug'], $b['fahrzeug']);

er sortiert mir jetzt schön meine "fahrzeuge" aber ich muss zuerst nach fahrzeugen sortieren und zusätzlich nach nach "anland" sortieren.

wobei die höhere priorität auf dem fahrzeugen liegt.

vielen lieben dank :D bin dir ein kaffee schuldig so früh am morgen *gg*
0

#4 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 06. November 2008 - 10:11

Apropos...du kriegst das Array nicht zufällig aus einer Datenbank? Weil das könntest du mit "order by" direkt in einer Zeile lösen.

Hmm...gute Frage. Mir fällt gerade keine Möglichkeit ein, so etwas in einem Callback zu lösen. Man könnte es mit
 strcmp($a['fahrzeug'], $b['fahrzeug']) && strcmp($a['anland'], $b['anland'])
versuchen, aber dadurch würde man IMO gleichzeitig sortieren ohne Priorisierung auf Fahrzeug. Aber du kannst es trotzdem mal versuchen.

Ansonsten könntest du zuerst nach anland sortieren und dieses sortierte Array nochmal nach Fahrzeug sortieren. Das müsste auf jeden Fall funktionieren.
function cmpByAnland($a, $b) {
	return strcmp($a['anland'], $b['anland']);
}

function cmpByFahrzeug($a, $b) {
	return strcmp($a['fahrzeug'], $b['fahrzeug']);
}

usort ($ar, "cmpByAnland");
usort ($ar, "cmpByFahrzeug");


Party sagte:

vielen lieben dank smile.gif bin dir ein kaffee schuldig so früh am morgen *gg*

Immer wieder gerne, aber genügend Kaffee habe ich schon intus. Morgen früh vielleicht. :D
0

#5 Mitglied ist offline   Party 

  • Gruppe: aktive Mitglieder
  • Beiträge: 501
  • Beigetreten: 16. Januar 04
  • Reputation: 0

geschrieben 12. November 2008 - 08:13

sry für die späte antwort :)

habs dann so gelöst falls es mal wer brauchen sollte. funktioniert spitze.

	foreach ($tmp_table_body as $key => $row) {
		$serv[$key]  = $row['2'];
		$vg[$key] = $row['3'];
		$fra[$key] = $row['4'];
	}
	array_multisort($vg, SORT_ASC, $serv, SORT_ASC, $fra, SORT_ASC, $tmp_table_body);


bool array_multisort ( array $ar1 [, mixed $arg [, mixed $... [, array $... ]]] )
Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

array_multisort() wird zum Sortieren von entweder mehreren Arrays auf einmal, oder eines multidimensionalen Arrays nach einer oder mehreren Dimensionen benutzt. Bei der Sortierung werden die Schlüsselassoziationen beibehalten.

Dieser Beitrag wurde von Party bearbeitet: 12. November 2008 - 08:14

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0