Eurokicker
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 01.08.2007, 12:52   #1
DSB
TP-Veteran
 
Benutzerbild von DSB
 
Registriert seit: Mar 2005
Ort: Weyhe
DSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's geht

Multidimensionale Arrays nach beliebigen Indexen sortieren


Hallo TPler,

bei größeren Arrays steht man häufig vor dem Problem eine Ausgabe nach bestimmten Kriterien zu verwirklichen.Bei mehrdimensionalen Arrays ist das schon eine recht komplexe Aufgabe. In den Kommentaren auf php.net habe ich eine schöne Routine gefunden, die ein Array nach beliebigen Indexen in beliebigen Ebenen sortieren kann. Diese habe ich noch etwas aufgebohrt, so dass man wählen kann, ob eine Sortierung jeweils auf- oder absteigend nach String- oder Zahlenlogik erfolgen soll. Ebenso ist eine Verschachtelung von Kriterien (ähnlich dem ORDER BY-Statement bei SQL) möglich.

Ein Anwendungsbeispiel sagt mehr als 1000 Worte:
PHP-Code:
<?php
function get_orderarray($order)
{
        
$order_arr =array();
        
$orders=explode('|',$order);
        foreach (
$orders as $o)
        {
                
$d=explode(',',$o);
                
$order_arr[]=array($d[0],$d[1]);
        }
        return 
$order_arr;
}

// extended to allow sort direction per field sorted against
function arfsort_func$a$b ){
  foreach( 
$GLOBALS['__ARFSORT_LIST__'] as $f ) {
    switch (
$f[1]) { // switch on ascending or descending value
      
case "d":
        
$strc strcmpstrtolower($b[$f[0]]), strtolower($a[$f[0]]) );
        if ( 
$strc != ){
          return 
$strc;
        }
      break;
      case 
"a":
        
$strc strcmpstrtolower($a[$f[0]]), strtolower($b[$f[0]]) );
        if ( 
$strc != ){
          return 
$strc;
        }
      break;
      case 
"D":
        
$strc = (floatval($b[$f[0]])<floatval($a[$f[0]])) ? -1:1;
        if (
$b[$f[0]]!=$a[$f[0]])
        {
          return 
$strc;
        }
      break;
      case 
"A":
        
$strc = (floatval($b[$f[0]])>floatval($a[$f[0]])) ? -1:1;
        if (
$b[$f[0]]!=$a[$f[0]])
        {
          return 
$strc;
        }
      break;
    }
  }
  return 
0;
}

function 
arfsort$a$fl )
{
  
$GLOBALS['__ARFSORT_LIST__'] = $fl;
  
usort$a'arfsort_func' );
  return 
$a;
}

/*
Anwendung:
$sortiertes array = arfsort( $array, get_orderarray($order));

$order => 'feldname,Richtung+Typ|feldname2,Richtung+Typ|...'

a=ascending (aufsteigend nach Stringlogik)
d=descending (absteigend nach Stringlogik)
A=ascending (aufsteigend nach Wertelogik)
D=descending (absteigend nach Wertelogik)
*/

// Anwendungsbeispiel

$array=array(
=> array(
    
'Nachname' => 'Muster',
    
'Name' => 'Otto',
    
'Alter' => 27,
    
'Skills' => array('PHP'=>8,'MySQL'=>6,'C++'=>2)
    ),
=> array(
    
'Nachname' => 'Müller',
    
'Name' => 'Heinz',
    
'Alter' => 46,
    
'Skills' => array('PHP'=>2,'MySQL'=>9,'C++'=>9)
    ),
=> array(
    
'Nachname' => 'Müller',
    
'Name' => 'Otto',
    
'Alter' => 24,
    
'Skills' => array('PHP'=>8,'MySQL'=>7,'C++'=>2)
    )
);

echo 
"<pre>";
echo 
"Array vorher:<br>";
print_r($array);
echo 
"-------------------------------------<br>";
echo 
"Sortiert nach Nachname und anschließend nach Vorname aufsteigend:<br>";
print_r(arfsort($arrayget_orderarray('Nachname,a|Name,a')));
echo 
"-------------------------------------<br>";

echo 
"Sortiert nach PHP-Skills absteigend, bei Gleichheit nach Alter aufsteigend:<br>";
print_r(arfsort($arrayget_orderarray('PHP,A|Alter,A')));
echo 
"-------------------------------------<br>";

echo 
"Sortiert nach MySQL-Skills absteigend, dann nach PHP-Skills absteigend - bei Gleichheit nach Alter aufsteigend:<br>";
print_r(arfsort($arrayget_orderarray('MySQL,D|PHP,D|Alter,A')));
echo 
"-------------------------------------<br>";

echo 
"</pre>";

?>
Viel Spaß damit.
__________________
Gruß, DSB
Einfaches Backup/ Restore Deiner MySQl-Datenbank

Geändert von Rizzo (01.08.2007 um 16:40 Uhr). Grund: Code-Box durch PHP-Box ersetzt
DSB ist offline   Mit Zitat antworten


Alt 01.08.2007, 16:40   #2
TP-Moderator
 
Benutzerbild von Rizzo
 
Registriert seit: Aug 2004
Ort: Kaiserslautern
Rizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine User
Hey, eine geniale Funktion, Danke!
Ich glaube die pack' ich mal mit in die Schnipsel-Sammlung, wa?!
__________________
#.Viele Grüße, Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
.
Rizzo ist gerade online   Mit Zitat antworten
Alt 01.08.2007, 16:41   #3
DSB
TP-Veteran
 
Benutzerbild von DSB
 
Registriert seit: Mar 2005
Ort: Weyhe
DSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's geht
Zitat:
Zitat von Rizzo Beitrag anzeigen
Hey, eine geniale Funktion, Danke!
Ich glaube die pack' ich mal mit in die Schnipsel-Sammlung, wa?!
Meinetwegen gerne.
__________________
Gruß, DSB
Einfaches Backup/ Restore Deiner MySQl-Datenbank
DSB ist offline   Mit Zitat antworten
Alt 01.08.2007, 16:44   #4
TP-Moderator
 
Benutzerbild von Rizzo
 
Registriert seit: Aug 2004
Ort: Kaiserslautern
Rizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine User
Zitat:
Zitat von DSB Beitrag anzeigen
Meinetwegen gerne.
Schon passiert
Ich war mal so frei und hab' in deinem Beitrag die Code-Box durch 'ne PHP-Box ersetzt, wegen der hübschen Farben und der dadurch besseren Lesbarkeit.
__________________
#.Viele Grüße, Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
.
Rizzo ist gerade online   Mit Zitat antworten
Alt 01.08.2007, 16:49   #5
DSB
TP-Veteran
 
Benutzerbild von DSB
 
Registriert seit: Mar 2005
Ort: Weyhe
DSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's geht
Gerne.
Es gibt eben immer etwas zu verbessern. Wäre ja sonst auch langweilig.

Ich hoffe, mit der Funktion kann auch jemand etwas anfangen. Ich selbst habe mir bei der Thematik schon oft die Finger und Hirnwindungen verstaucht und musste mich letztlich mit Kompromissen zufrieden geben. Mit der Funktion habe ich selbst nun auch ein Universalmittel, was ich häufig einsetzen kann.
__________________
Gruß, DSB
Einfaches Backup/ Restore Deiner MySQl-Datenbank
DSB ist offline   Mit Zitat antworten
Alt 01.08.2007, 17:17   #6
TP-Moderator
 
Benutzerbild von Cybergreek
 
Registriert seit: Nov 2005
Ort: Köln
Cybergreek hilft, wo's gehtCybergreek hilft, wo's gehtCybergreek hilft, wo's geht
Zitat:
Zitat von DSB Beitrag anzeigen
...Ich hoffe, mit der Funktion kann auch jemand etwas anfangen....
Ganz bestimmt! Ich brauche sie zwar grad im Moment nicht, aber die Erinnerung an diesen Thread ist (hoffentlich) dauerhaft im Kopf verankert! Und zur Not gibt es ja noch die Suche

Thanks für's zur Verfügung stellen!
__________________
Grüße vom Griechen,
Cybergreek!

WikiDict.de - Das Wiki-Wörterbuch
Cybergreek ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik > Traum-Scripts
Multidimensionale Arrays nach beliebigen Indexen sortieren [Snippet] Multidimensionale Arrays nach beliebigen Indexen sortieren
« Explode mit Berücksichtigung von Maskierung | Validator Klasse »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
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


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:08 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67