zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Array sortieren

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 08.09.2008, 18:16
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 28.12.2006
Beiträge: 294
meGa befindet sich auf einem aufstrebenden Ast
Standard Array sortieren

Hallo Jungs,

ich habe ein Array der so aussieht:

Zitat:
Array
(
[0] => Array
(
[competition] => 10|Season 3
[round] => 1|Week 1 (Division 4f)
[teams] => 343|Hungary|Crit Rocket@343|European|diced: Reloaded
[time] => 1220990400
[maps] => cp_pro_granary|cp_well
)

[1] => Array
(
[competition] => 10|Season 3
[round] => 2|Week 2 (Division 1)
[teams] => 111|European|Ubersexuals@111|France|Creativ`TF2
[time] => 1220990400
[maps] => cp_gravelpit|ctf_turbine
)

)
Wie kann ich den Array nach dem Element "time" sortieren? Ich hab mir schonmal array_multisort angeschaut, steige da aber nicht so durch. Danke im voraus!
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 08.09.2008, 18:20
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Was ist denn das für eine Programmiersprache ?
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 08.09.2008, 18:22
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 28.12.2006
Beiträge: 294
meGa befindet sich auf einem aufstrebenden Ast
Standard

PHP sorry ...
Mit Zitat antworten
  #4 (permalink)  
Alt 08.09.2008, 18:27
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Schade, in C ist das piepeinfach.

qsort() sollte es aber auch in PHP geben. Der Aufruf müßte dann in etwa so sein:
PHP-Code:
qsort( array, anzahl_elementegroesse_eines_elementsvergleichsfunktion); 
Die Vergleichsfunktion gibt dann je nach Vergleichsergebnis -1, +2 oder 0 zurück.
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
  #5 (permalink)  
Alt 08.09.2008, 19:13
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Nee, PHP bietet diese Funktionalität afaik leider nicht, dafür geht es mit array_multisort auch recht einfach, wenn man diese Funktion einmal verstanden hat, man muss aber ein wenig Vorarbeit leisten, angenommen Dein Array liegt in $array:
PHP-Code:
$times = array();
foreach (
$array as $key => $value) {
   
$times[$key] = $value['time'];
}
array_multisort($timesSORT_ASCSORT_NUMERIC$array); 
Wenn bei gleicher Zeit z.B. nach competition absteigend sortiert werden soll, dann z.B. so
PHP-Code:
$times = array();
$competitions = array();
foreach (
$array as $key => $value) {
   
$times[$key]        = $value['time'];
   
$competitions[$key] = $value['competition'];
}
array_multisort($timesSORT_ASCSORT_NUMERIC$competitionsSORT_DESC$array); 
Mit Zitat antworten
  #6 (permalink)  
Alt 09.09.2008, 16:04
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.953
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Also ich würd‘s mit usort machen.
PHP-Code:
$array = array()

function 
cmp($a$b) {
  return 
$a['time'] >= $b['time'];
}

usort($array'cmp'); 
Sollte für solche Fälle die einfachste und flexibelste Lösung sein.

Mario

PS: @Scheppertreiber: nur weil qsort in PHP usort heißt, kann es nicht weniger.
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
  #7 (permalink)  
Alt 09.09.2008, 16:08
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Genau so etwas meinte ich ...
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
  #8 (permalink)  
Alt 09.09.2008, 16:10
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

argh, warum kenne ich diese Funktion nicht? *grml*

Dann sollte die Vergleichsfunktion aber so aufgebaut sein:
PHP-Code:
function cmp($a$b) {
   if (
$a['time'] == $b['time']) {
      return 
0;
   }
   return 
$a['time'] < $b['time'] ? -1;

Sonst liefert sie ja "true" oder "false" zurück, was mit 1 bzw. 0 "gleichwertig" wäre, aber "-1", also kleiner gäbe es nie.
Mit Zitat antworten
  #9 (permalink)  
Alt 09.09.2008, 16:18
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

PHP-Code:
return a->time == b->time : (a->time b->time ? -1); 
hehe ... geht noch knapper
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 09.09.2008, 19:29
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.953
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von mantiz Beitrag anzeigen
Dann sollte die Vergleichsfunktion aber so aufgebaut sein: …

Sonst liefert sie ja "true" oder "false" zurück, was mit 1 bzw. 0 "gleichwertig" wäre, aber "-1", also kleiner gäbe es nie.
Ja, richtig. Hier noch mal die (vermutlich) kürzeste Form:
PHP-Code:
function cmp($a$b) {
  return (
$a['time'] == $b['time']) ? : ($a['time'] > $b['time']) ? : -1;

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ausgabe geschieht nur einmal Benutzername Serveradministration und serverseitige Scripte 0 12.05.2011 16:59
URL mit XML in (X)HTML ausgeben blockmarc (X)HTML 17 05.06.2010 17:39
Array nach Sub Array Wert sortieren tichy Serveradministration und serverseitige Scripte 1 24.06.2009 16:58
Array als Liste sortieren kampfgnom Serveradministration und serverseitige Scripte 10 11.03.2009 15:47
Array mit Datum als Index sortieren STRiDeR Serveradministration und serverseitige Scripte 5 04.10.2008 16:38


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:21 Uhr.