php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack (1) Themen-Optionen Thema bewerten
Alt 05.06.2008, 15:59  
Neuer Benutzer
 
Registriert seit: 09.04.2008
Beiträge: 19
diarrhoe befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] zweidimensionales Array sortieren (mal wieder..)

Hallo,

über google habe ich ja schon eine ganze Menge Threads zu diesem Thema gefunden, allerdings nicht genau DAS, was ich suche. Ich hoffe mal, dass ich mich bei der Hitze nicht einfach nur zu blöd anstelle...

Also, nun ins Detail:
Ich habe ein zweidimensionales Array $two_dim['assoc'][$i], d. h. die erste Dimesion ist assoziativ (hat die Länge 3) und die zweite durchnummeriert bis 100+. Nun habe ich die Funktionen usort() (anscheinend für mich uninteressant) und array_multisort() gefunden.


$two_d|--0--|--1--|--2--
===============
id------|--1--|--14-|--4--
name--|Hans|Adi--|Ela--
points-|--20-|--10-|--15


Wenn ich nun array_multisort($two_dim['points'],SORT_DESC) aufrufe, dann sortiert er zwar diese Punktzahlen, behält die Verknüpfungen bei Namen und ID aber nicht bei.
Welcher Kniff erspart mir große Verzweiflung?

Grüße an alle
diarrhoe ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 05.06.2008, 16:08  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Ich habs zwar noch nie gemacht, aber ich könnte mir vorstellen das das so geht:

PHP-Code:
$two_dim ksort(array_map("ksort",$two_dim)); 
cycap ist offline  
Alt 05.06.2008, 16:17  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Hallo diarrhoe (eigenartiger Nickname übrigens...)

Die einfachste Methode wäre, so die Daten aus ner DB kommen, sie dort zu sortieren. PHP sortiert numerische Indizies i.A. nicht Schlüssel-beibehaltend. Die unschöne zweite Variante wäre deshalb, String Schlüssel zu verwenden, indem Du bspw. ein Präfix verwendest.

Ob cycap's Variante funktioniert bleibt auszuprobieren, denn ob ksort numerische Indexe beibehält...
[edit] Ähhhm, Quatsch. Natürlich nein, weil cycap wohl zumindest asort meinte....
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (05.06.2008 um 16:20 Uhr).
nikosch ist offline  
Alt 05.06.2008, 16:20  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

[edit]
Ups, sicher meinte ich asort

Zitat:
Zitat von cycap Beitrag anzeigen
Ich habs zwar noch nie gemacht, aber ich könnte mir vorstellen das das so geht:

PHP-Code:
$two_dim asort(array_map("asort",$two_dim)); // korrigiert nach Hinweis von nikosch 

Geändert von cycap (05.06.2008 um 16:24 Uhr).
cycap ist offline  
Alt 05.06.2008, 16:24  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Die Zuweisung ist auch falsch. Die sort Funktionen verwenden alle Referenzen...

Ganz klappts nicht. Vgl.

PHP-Code:
<pre><?
$two_dim
['a'][1] = 'a1';
$two_dim['c'][1] = 'c1';
$two_dim['a'][11] = 'a11';
$two_dim['b'][8] = 'b8';
$two_dim['a'][7] = 'a7';
asort(array_map("asort",$two_dim));  

var_dump($two_dim );

/*

array(3) {
  ["a"]=>
  array(3) {
    [1]=>
    string(2) "a1"
    [11]=>
    string(3) "a11"
    [7]=>
    string(2) "a7"
  }
  ["c"]=>
  array(1) {
    [1]=>
    string(2) "c1"
  }
  ["b"]=>
  array(1) {
    [8]=>
    string(2) "b8"
  }
}

*/
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (05.06.2008 um 16:26 Uhr).
nikosch ist offline  
Alt 05.06.2008, 16:28  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Schande über mich aber die Idee war wenigstens richtig
cycap ist offline  
Alt 05.06.2008, 16:44  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Naja, nicht wirklich. Wenn man die Arbeitsweise überlegt kann das auch gar nicht klappen. Vom tiefsten Zweig nach außen bekommst Du mit normalen Funktionen allenfalls die 'Blätter' eines Zweiges sortiert, aber nicht die gesamte Menge aller Einträge. Das ist kein triviales Problem, schon gar nicht wenn man bedenkt, dass ja auch mehrere Verschachtelungstiefen in einem Array bestehen könnten.
Vielleicht könnte man die Struktur des Arrays beibehalten, statt der Werte auf den Index eines zweiten, numerischen Arrays verweisen und jenes dann schlüsselkonsistent sortieren. Aber wie gesagt, das beste wäre über die Datenbank. Mal sehen was der OT dazu sagt....
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 05.06.2008, 17:26  
Neuer Benutzer
 
Registriert seit: 09.04.2008
Beiträge: 19
diarrhoe befindet sich auf einem aufstrebenden Ast
Standard

Okay, jetzt habe ich eure Beiträge durchgearbeitet und die php.net-Doku zu den einzelnen Funktionen gelesen (mit dem Begriff der Callback-Funktionen hab ich noch einige Schwierigkeiten, aber das ist ein anderes Thema).

Die Sortierung funktioniert so leider nicht - aber das müsste ja eigentlich auch klar sein, denn es wird noch nirgendwo angegeben, *wonach* sortiert werden soll. Für weitere Tipps bin ich natürlich sehr dankbar, ansonsten lerne ich jetzt mal die Doku weiter auswendig

Mit einer Datenbank wäre das alles soo schön einfach, aber das ist leider gerade nicht möglich..

Ebenfalls probiert:
Code:
asort(array_map("asort",$two_dim['points']));
aber das bricht mit
Code:
asort() expects parameter 1 to be array..
ab, wobei $two_dim['points'] doch eigentlich auch ein Array ist oder..?
diarrhoe ist offline  
Alt 05.06.2008, 17:34  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Kommt darauf an, was drinsteht. Der Fehler bezieht sich wohl auch eher auf das andere asort, weil dieses eine Referenz erwartet, keinen Ausdruck.
Aber wie gesagt - ich denke nicht dass es eine Triviallösung gibt, die einfach ein, zwei Sort Statements verbindet. Mal über die Sache mit dem Index-Array nachgedacht?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (05.06.2008 um 17:37 Uhr).
nikosch ist offline  
Alt 05.06.2008, 19:20  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ich merke gerade, ich glaube, ich habe die Ausgangsfrage doch falsch interpretiert. Kannst Du das nochmal präzisieren: Im Endeffekt willst Du immer nur alle Werte eines einem assoz. Schlüssel zugeordneten Arrays sortieren und dabei die num. Indexe behalten oder?
Im einfachsten Falle wäre das also doch die obige Lösung:
PHP-Code:
asort(array_map("asort",$two_dim)); 
Wenn nicht mußt Du mal eine Vorher/Nachher Struktur zeigen, wie dasaussehen soll.

Btw: PHP: Pseudo-types and variables used in this documentation - Manual
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (05.06.2008 um 19:23 Uhr).
nikosch ist offline  
 


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

LinkBacks (?)
LinkBack to this Thread: http://www.php.de/php-tipps-2008/1567-erledigt-zweidimensionales-array-sortieren-mal-wieder.html
Erstellt von For Type Datum
Mehrdimensionales array - phpfriend.de This thread Refback 09.06.2008 13:39

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Array sortieren mit regex Lupi PHP Tipps 2008 3 21.07.2008 15:17
Mehrdimensionales Array sortieren Unbekanntes_Pferd PHP Tipps 2006 6 23.05.2006 20:42
array richtig sortieren, dann ausgeben Heart PHP Tipps 2006 5 28.04.2006 20:23
Zweidimensionales Array auslesen u wieder in Array schreiben Lobo PHP Tipps 2006 7 20.04.2006 11:37
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Array verkehrt sortieren (key) // letzter Arrayeintrag PHP Tipps 2005-2 5 20.09.2005 15:55
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
zweidimensionales Array sortieren PHP Tipps 2005-2 4 06.07.2005 13:29
2 Array in Abhänigkeit sortieren? PHP Tipps 2005 4 10.02.2005 20:31
Array mit Gruppen: Wie Sortieren PHP Tipps 2005 2 29.01.2005 15:15
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
zweidimensionales array sortieren PHP Tipps 2004 4 16.10.2004 20:06

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
asort mehrdimensionales array, vba sortieren zweidimensionaler array, vba zweidimensionales array sortieren, vba array länge mehrdimensional, vb.net array mehrdimensional sortieren, mehrdimensionales array nach string sortieren, zweidimensionales array sortieren vba, vba 2 dimensionales array auf 1 verweisen, vba mehrdimensionales array größe, sortiere mehrdimensionales array vb, vb.net array sortieren zweidimesional, vba mehrdimensionales array sortieren, zweidimensionales array sortieren vb.net, strings mittel order by richtig numerisch sortierenvb.net, vb 2008 2 dimensionales array sortieren, zweidimensionales array vba sortieren, vb 2008 mehrdimensionales array sortieren, vba mehrdimensional array sortieren, vb.net mehrdimensionale array sort, zweidimensionales array sort visual basic .net

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:05 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