PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Mehrdimensionalen Array sortieren (https://www.php-resource.de/forum/php-developer-forum/55905-mehrdimensionalen-array-sortieren.html)

alkaluropus 20-06-2005 17:56

Mehrdimensionalen Array sortieren
 
Hallo,

ich habe eine XML in einen komplexen Array eingelesen, und würde
die einzelnen [EVENT]-Elemente nach der [id] aus dem [Service]-Array sortieren.
Den Aufbau des Array sieht man im folgenden.

Code:


Array
(
    [EVENT] => Array
        (
            [0] => Array
                (
                    [id] => 31989
                    [start] => 16:00:00
                    [stop] => 16:15:00
                    [duration] => 00H15M00S
                    [Service] => Array
                        (
                            [id] => 28208
                        )

                    [title] => Array
                        (
                            [lang] => deu
                            [_content] => Text2
                        )

                )

            [1] => Array
                (
                    [id] => 39496
                    [start] => 14:00:00
                    [stop] => 18:00:00
                    [duration] => 04H00M00S
                    [Service] => Array
                        (
                            [id] => 28201
                        )

                    [title] => Array
                        (
                            [lang] => deu
                            [_content] => Textbla
                        )

                )

            [2] => Array
               
                ... usw.

Nimmt man für so etwas multisort oder definiert sich per usort eine
eigene Sortierreihenfolge? Bin für Tipps u. ev. ein kleines Codebeispiel
zur Veranschaulichung dankbar.

Viele Grüße,
Matthias

Wurzel 20-06-2005 18:31

Re: Mehrdimensionalen Array sortieren
 
Zitat:

Original geschrieben von alkaluropus
Nimmt man für so etwas multisort oder definiert sich per usort eine
eigene Sortierreihenfolge?

man nimmt in aller erster linie mal die boardsuche ;)

Meillo 21-06-2005 09:39

welchen Sortieralgo du letztendlich verwendest bleibt dir selbst überlassen - bei so kleinen Dingen sind die Geschwindigkeitsunterschiede nicht so groß.
Wichtig ist nur, dass du ihn korrekt auf die Mehrdimensionalität anwendest

prego 21-06-2005 09:55

guckst du hier - hat mir sehr geholfen...

http://www.php-resource.de/forum/sho...ight=multisort

alkaluropus 21-06-2005 11:50

Hmm - ich bin noch am basteln, habs leider noch nicht hinbekommen.

Wichtig wäre ja auch, daß zwei Sortiervorgänge nacheinander
ablaufen, so daß zuerst die Arrays nach dem Element
$data["Event"][$i]["Service]["id] und nach dieser Sortierung
noch nach $data["EVENT"][$i]["start"] sortieren lassen.

Wenn man das also mit Zeilen u. Spalten einer Tabelle vergleichen
kann, so als wenn man in Excel "Sortieren nach" und im Feld
darunter gleich "Anschliessend nach" wählt. Nicht das beste
Beispiel aber es beschreibt was ich erreichen will.

Viele Grüße
Matthias

prego 21-06-2005 12:18

die Funktion von MrHappiness macht genau das, deswegen hab ich dir den Link gepostet - schau doch einfach mal. Da brauchste nur nen array übergen wie sortiert werden soll...

alkaluropus 21-06-2005 13:47

Hallo,

Zitat:

Original geschrieben von prego
die Funktion von MrHappiness macht genau das, deswegen hab ich dir den Link gepostet - schau doch einfach mal. Da brauchste nur nen array übergen wie sortiert werden soll...
OK - habe es mir mal genau durchgeschaut, und du hast recht. Allerdings
habe ich noch das Problem, das ich nicht weiß wie ich meine beiden
Faktoren $sort["Event"][$i]["Service]["id]
und $sort["EVENT"][$i]["start"] in die $order einbaue. Ist einfach eine
Syntaxfrage.


PHP-Code:


function multisort($array$criterias)
{
  
$sort_rule '';
  foreach(
$criterias as $criteria)
  {
    foreach(
$array as $row)
      
$sort_array[$criteria['col']][] = $row[$criteria['col']];
    
$sort_rule .= '$sort_array['.
      (
is_numeric($criteria['col']) ? $criteria['col'] : "'".$criteria['col']."'").
      
'], '.$criteria['dir'].',';
  }
  eval(
"array_multisort($sort_rule".' $array);');
  return 
$array;
}


$order = array(
    array(
        
'col' => 'id',
        
'dir' => SORT_ASC
    
)
    array(
        
'col' => 'start',
        
'dir' => SORT_ASC
    
)
);

echo 
"<pre>";
 
print_r($sort);
echo 
"</pre>";

echo 
"<pre>";
 
print_r(multisort($sort$order));
echo 
"</pre>"


Viele Grüße
Matthias

mrhappiness 21-06-2005 14:21

Kompliziert, wenn du einen Index namens service_id auf gleicher Ebene wie start hättest, wäre es allerdings überhaupt kein Problem

alkaluropus 21-06-2005 15:46

Zitat:

Original geschrieben von mrhappiness
Kompliziert, wenn du einen Index namens service_id auf gleicher Ebene wie start hättest, wäre es allerdings überhaupt kein Problem
Ja - dachte ich mir auch. Jetzt habe ich es so umprogrammiert, das
es schon auf die service_id vorselektiert ist. Jetzt muss ich also
nur noch nach Startzeit sortieren. Du sagst, es wäre kein
Problem. Mir fehlt halt nur die Syntax, wie ich die Position von 'start'
im Array in der $order angebe.


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:34 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG