php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.01.2011, 19:36  
Benutzer
 
Registriert seit: 05.05.2010
Beiträge: 58
PHP-Kenntnisse:
Anfänger
Phoenix@ befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Array sortieren

Hallo,

ich habe da eine Anfängerfrage und habe bereits im PHP Manual gelesen - Ich schaffe es aber nicht - Und hoffe mal, dass mein Beitrag hier im "PHP Anfänger" Forum daher erlaubt ist.

$anzeige[0]['datum'] = WERT 1015
$anzeige[0]['titel']
$anzeige[0]['text']

$anzeige[1]['datum'] = WERT 2015
$anzeige[1]['titel']
$anzeige[1]['text']

Ich würde jetzt gerne das Array nach Datum sortieren:

$anzeige[1]['datum'] = WERT 1015
$anzeige[1]['titel']
$anzeige[1]['text']

$anzeige[0]['datum'] = WERT 2015
$anzeige[0]['titel']
$anzeige[0]['text']

Habe auch bereits Funktionien gefunden wie:

ksort($anzeige);

Aber wie kann ich jetzt angeben, dass er nach der Spalte ['datum'] sortieren soll? (DESC)

Geändert von Phoenix@ (19.01.2011 um 19:40 Uhr).
Phoenix@ ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.01.2011, 20:01  
Erfahrener Benutzer
 
Registriert seit: 07.06.2008
Beiträge: 992
PHP-Kenntnisse:
Fortgeschritten
Frank befindet sich auf einem aufstrebenden Ast
Frank eine Nachricht über ICQ schicken Frank eine Nachricht über MSN schicken Frank eine Nachricht über Yahoo! schicken
Standard

Du hast ein mehrdimensionales Array, da hilft dir ksort nicht weiter.
Benutze usort
__________________
Frank ist offline   Mit Zitat antworten
Alt 19.01.2011, 20:09  
Benutzer
 
Registriert seit: 05.05.2010
Beiträge: 58
PHP-Kenntnisse:
Anfänger
Phoenix@ befindet sich auf einem aufstrebenden Ast
Standard

Danke für den Link aber ich verstehe die Funktion einfach nicht:

PHP-Code:
function cmp($a$b)
{
    return 
strcmp($a["frucht"], $b["frucht"]);
}

$fruechte[0]["frucht"] = "Zitronen";
$fruechte[1]["frucht"] = "Aepfel";
$fruechte[2]["frucht"] = "Orangen";

usort($fruechte"cmp");

while (list(
$key$value) = each($fruits)) {
    echo 
"\$fruechte[$key]: " $value["frucht"] . "\n";

Verstehe ich einfach nicht, vor allem wo ist die eigentliche Sortierung? Wofür ist die Variable $Key? Wofür ist die Funktion cmp eigentlich da wenn er die doch dadrunter in der while-Schleife durch geht? Bei mir leuchten da echt nur Fragezeichen auf - Ich hasse Arrays aber allgemein auch.

Kann mir das evtl. jemand an meinem obigen Array erklären?
Phoenix@ ist offline   Mit Zitat antworten
Alt 19.01.2011, 20:20  
Erfahrener Benutzer
 
Registriert seit: 07.06.2008
Beiträge: 992
PHP-Kenntnisse:
Fortgeschritten
Frank befindet sich auf einem aufstrebenden Ast
Frank eine Nachricht über ICQ schicken Frank eine Nachricht über MSN schicken Frank eine Nachricht über Yahoo! schicken
Standard

Du implementierst eine eigene Funktion. Diese Funktion bekommt dann durch usort immer zwei Elemente des Arrays. Innerhalb der Funktion musst du dann nur noch prüfen ob Element 1 kleiner als Element 2 ist. Je nachdem gibst du dann true oder false zurück.

Im Beispiel wird das mit strcmp gemacht. In deinem Fall musst du das Datum überprüfen
__________________
Frank ist offline   Mit Zitat antworten
Alt 19.01.2011, 20:24  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

cmp() werden zwei Array-Elemente übergeben. Statt auf "frucht" musst du eben auf das entsprechende Unterelement zugreifen, in deinem Fall "datum". Wenn das Datum in $a kleiner ist, als das in $b musst du -1 übergeben, bei Gleichheit 0, wenn das Datum aus $b größer als das von $a ist, gibst du +1 zurück. Das ist so üblich bei Vergleichsfunktionen.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 19.01.2011, 20:29  
Erfahrener Benutzer
 
Registriert seit: 10.01.2010
Beiträge: 386
PHP-Kenntnisse:
Fortgeschritten
ChrisvA befindet sich auf einem aufstrebenden Ast
Standard

Also, zunächst einmal ist wichtig zu wissen, dass cmp bei usort der Name der cmp-Funktion ist. (cmp steht für Compare)
Die Funktion gibt nur zurück, ob $a größer (Rückgabe >0)/kleiner(Rückgabe < 0)/gleich (Rückgabe 0) $b ist und ist für das Sortierkriterium verantwortlich.
Die eigentliche Sortierung passiert beim Aufruf usort($fruechte, "cmp").

Die ganze while-Schleife dient ausschließlich der Ausgabe und muss dich erst einmal nicht interessieren.

Edit: Bin wohl zu langsam.
ChrisvA ist offline   Mit Zitat antworten
Alt 19.01.2011, 20:45  
Benutzer
 
Registriert seit: 05.05.2010
Beiträge: 58
PHP-Kenntnisse:
Anfänger
Phoenix@ befindet sich auf einem aufstrebenden Ast
Standard

Ich verstehe es immer noch nicht weil er

usort($fruechte, "cmp");

Ja nur 1x aufruft ... wie kann er da alle Felder durchgehen (bei mir jetzt gerade fünf Felder)

und die eigentlich while-Schleife wo alle Felder durchgegangen werden ja erst später kommt ...

Aber gut ... Es funktioniert! Danke

-----------------

AHHH ich habe es verstanden! Geil ... bah usort(); ist ja auch eine eigene Funktion, da ist bestimmt noch einmal eine eigene schleife hinter :P

Tut mir leid wenn ich mich etwas dumm angestellt habe - Aber, nu verstehe ich, cool, danke.

Geändert von Phoenix@ (19.01.2011 um 20:51 Uhr).
Phoenix@ ist offline   Mit Zitat antworten
Alt 19.01.2011, 20:50  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

usort() implementiert einem Sortieralgorithmus, der darauf beruht so oft zwei von ihm vorgeschlagene Elemente des zu sortierenden Arrays zu vergleichen, bis der Algorithmus eine Reihenfolge erstellen kann. Aber um zu wissen welches von zwei Elementen das größere/kleinere ist, musst du eben eine Funktion zur Verfügung stellen, die das übernimmt, sonst müsste usort() ja raten. Wenn du ein echo in dein cmp() einbaust, siehst du, dass deine Funktion mehr als einmal mit unterschiedlichen Elementen aufgerufen wird (es sei denn du hast nur 2 Elemente im Array).
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 20.01.2011, 16:23  
Erfahrener Benutzer
 
Registriert seit: 10.01.2010
Beiträge: 386
PHP-Kenntnisse:
Fortgeschritten
ChrisvA befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Phoenix@ Beitrag anzeigen
[...]Tut mir leid wenn ich mich etwas dumm angestellt habe[...]
Muss es dir nicht, zum einen Stellen sich viele Leute noch viel dummer an und außerdem gehört schon einiges dazu solche Funktionen in Ihrem ganzen zu verstehen.
Siehe es einfach mal so, dass du dadurch jetzt eine ganze Menge gelernt hast. Dazu ist so ein Forum ja da.
ChrisvA ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Array werte zusammen rechnen fabi288 PHP Einsteiger 13 03.01.2011 16:08
[Erledigt] Array Sortieren ragtek PHP Einsteiger 5 15.12.2010 13:28
mehrdimensionales array inhalte tauschen pidaman PHP Tipps 2010 18 27.08.2010 16:58
Feed in Datenbank eintragen (Formate: json, php serialized, xml) high_five Datenbanken 5 17.06.2010 03:04
[Erledigt] Sortierung mehrerer Arrays philosapiens PHP Tipps 2010 16 08.06.2010 05:22
IE8 verliert Session Lenki PHP-Fortgeschrittene 10 25.04.2010 01:10
[Erledigt] Problem bei update mit array feldern fulltilt PHP Tipps 2010 6 13.02.2010 00:59
[Erledigt] Tabellen die sich selbst referenzieren Squall PHP Tipps 2009 19 04.08.2009 21:33
[Erledigt] Array Sortieren beist PHP Tipps 2009 4 10.07.2009 08:53
Array umwandeln von zwei zu mehrdimensional erselbst PHP Tipps 2009 6 02.04.2009 23:30
Array sortieren mit regex Lupi PHP Tipps 2008 3 21.07.2008 15:17
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
wert von array aussortieren, aray datum sortieren, array anzeige in php, array datum sortieren, bei usort key

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:53 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum