Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Mehrdimensionales Array sortieren (https://www.delphipraxis.net/130040-%5Bphp%5D-mehrdimensionales-array-sortieren.html)

Matze 2. Mär 2009 09:18


[PHP] Mehrdimensionales Array sortieren
 
Hi zusammen :hi:

ich habe ein PHP-Array, das wie folgt aufgebaut ist:

Code:
Array
(
    [/category/id20/Sport.html] => Array
        (
            [hits] => Array
                (
                    [abs] => 6
                    [rel] => 0.33
                )

            [traffic] => 95142
        )

    [/robots.txt] => Array
        (
            [hits] => Array
                (
                    [abs] => 79
                    [rel] => 4.39
                )

            [traffic] => 17125
        )

    ...
)
Das würde ich nun gerne absteigend nach [hits]['abs'] sortieren, sodass es hinterher so aussieht:

Code:
Array
(
    [/robots.txt] => Array
        (
            [hits] => Array
                (
                    [color=#ff0000][b][abs] => 79[/b][/color]
                    [rel] => 4.39
                )

            [traffic] => 17125
        )

    [/category/id20/Sport.html] => Array
        (
            [hits] => Array
                (
                    [color=#ff0000][b][abs] => 6[/b][/color]
                    [rel] => 0.33
                )

            [traffic] => 95142
        )

    ...
)
Ich bin auf "array_multisort()" gestoßen, doch wenn ich das richtig sehe, ist mein Vorhaben damit nicht möglich. Aber dass ich das manuell mit QuickSort und temporären Arrays sortieren muss, kann ich mir auch nicht ganz vorstellen. Das wäre ja immenser Aufwand.

Geht das irgendwie einfacher?

Grüße, Matze

KingIR 2. Mär 2009 09:22

Re: [PHP] Mehrdimensionales Array sortieren
 
Code:
function cmp($a, $b)
{
    if($a['hits']['abs'] == $b['hits']['abs']) return 0;
    return ($a['hits']['abs'] > $b['hits']['abs']) ? -1 : 1;
}

usort($dein_array, 'cmp');
http://de.php.net/manual/en/function.usort.php
http://de.php.net/manual/en/language...types.callback

Daniel 2. Mär 2009 09:24

Re: [PHP] Mehrdimensionales Array sortieren
 
Müsste nicht http://de.php.net/manual/en/function.uasort.php für Dich geeignet sein? Wenn ich das richtig sehe, sortierst Du ja glücklicherweise nur in einer Dimension, nämlich Deine "Haupt-Arrays". Diese haben dann gewisse Eigenschaften, welche das Sortier-Kriterium bilden.

Eigentlich müsste das mit uasort() zu machen sein. In Deinem selbstgebastelten Callback-Handler greifst Du dann auf hits/abs zu und die Sachen müsste laufen.



// Edit - Mist, zu langsam. ;-)

himitsu 2. Mär 2009 09:31

Re: [PHP] Mehrdimensionales Array sortieren
 
geht sowas nicht?
Code:
for ($i = 0; $i < count($myArray) - 1; $i++)
  for ($j = $i + 1; $j < count($myArray); $j++)
    if ($myArray[$i]['hits']['abs'] < $myArray[$j]['hits']['abs']) {
      $temp       = $myArray[$i];
      $myArray[$i] = $myArray[$j];
      $myArray[$j] = $temp;
    }
also soooo aufwändig isses ja nicht :angel:


[add] zu langsam (aber mit uasort sieht's auch netter aus :angel2: )

Matze 2. Mär 2009 09:33

Re: [PHP] Mehrdimensionales Array sortieren
 
Hallo ihr beiden,

ihr seid spitze. Das funktioniert viel einfacher als ich gedacht habe. Vielen Dank. :thumb:

Grüße, Matze


PS: @himi: Da ist mir usort() lieber. ;)

Edit: Bzw. uasort(), das Daniel angesprochen hat. Dann bleiben die Indizes erhalten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz