AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [PHP] Mehrdimensionales Array sortieren
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] Mehrdimensionales Array sortieren

Ein Thema von Matze · begonnen am 2. Mär 2009 · letzter Beitrag vom 2. Mär 2009
Antwort Antwort
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

[PHP] Mehrdimensionales Array sortieren

  Alt 2. Mär 2009, 10:18
Hi zusammen

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
  Mit Zitat antworten Zitat
Benutzerbild von KingIR
KingIR

Registriert seit: 19. Feb 2006
81 Beiträge
 
Delphi 2006 Professional
 
#2

Re: [PHP] Mehrdimensionales Array sortieren

  Alt 2. Mär 2009, 10:22
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
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: [PHP] Mehrdimensionales Array sortieren

  Alt 2. Mär 2009, 10:24
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: [PHP] Mehrdimensionales Array sortieren

  Alt 2. Mär 2009, 10:31
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


[add] zu langsam (aber mit uasort sieht's auch netter aus )
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: [PHP] Mehrdimensionales Array sortieren

  Alt 2. Mär 2009, 10:33
Hallo ihr beiden,

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

Grüße, Matze


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

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


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 aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz