Sahra: Mehrdimensionales Array sortieren Schlüssel erhalten

Hi,

wie mache ich aus

Array
(
    [2] => Array
        (
            [contenttype] => passwd
            [content] => Passwort
            [position] => 2
        )

[4] => Array
        (
            [contenttype] => email
            [content] => E-Mail
            [position] => 1
        )

[5] => Array
        (
            [contenttype] => server
            [content] => Serverauswahl
            [position] => 3
        )

)

Ein Array das die Schlüssel erhält aber den Email Eintrag zu erst hat?

Bis dann
Sahra

  1. Hallo,

    Array
    (
        [2] => Array
            (
                [contenttype] => passwd
                [content] => Passwort
                [position] => 2
            )

    [4] => Array
            (
                [contenttype] => email
                [content] => E-Mail
                [position] => 1
            )

    [5] => Array
            (
                [contenttype] => server
                [content] => Serverauswahl
                [position] => 3
            )

    )

    Ich gehe davon aus, dass Dein gewünschtes Ergebnis in etwa wie folgt aussieht:

    array(3) {
      [4]=>
      array(3) {
        ["contenttype"]=>
        string(5) "email"
        ["content"]=>
        string(6) "E-Mail"
        ["position"]=>
        int(1)
      }
      [2]=>
      array(3) {
        ["contenttype"]=>
        string(6) "passwd"
        ["content"]=>
        string(8) "Passwort"
        ["position"]=>
        int(2)
      }
      [5]=>
      array(3) {
        ["contenttype"]=>
        string(6) "server"
        ["content"]=>
        string(13) "Serverauswahl"
        ["position"]=>
        int(3)
      }
    }

    Ein Array das die Schlüssel erhält aber den Email Eintrag zu erst hat?

    Als erstes lohnt sich stets ein Blick in das Handbuch, dass eine Vergleichsübersicht über das Sortieren von Arrays bietet.

    Deine Anforderungen sind:
    a) die Sortierung erfolgt nach dem Wert (speziell dem Inhalt von contenttype)
    b) die Schlüssel müssen erhalten bleiben, auch wenn sie numerisch sind
    c) die Sortierung soll aufsteigend erfolgen

    Dadurch scheiden schon einmal die meisten Funktionen aus, es bleiben

    - asort
     - natcasesort
     - natsort
     - uasort

    asort ist nicht geeignet, weil Du keine einfachen Werte hast, sondern Arrays als Wert und Du nach einem bestimmten Arrayelement sortieren willst.
    Der spezielle Anwendungsfall von natsort und natcasesort ist nicht das, was Du willst, also bleibt

    uasort

    Alles, was Du noch brauchst, ist die benutzerspezifische Vergleichsfunktion. Wenn Du nur PHP 5.3.0 und höher unterstützen brauchst, dann bietet es sich an, dafür eine Lambda-Funktion zu nutzen:

      # Wir nutzen eine anonyme Funktion, die bei zwei übergebenen Werten  
      # die assoziative Arrays mit dem Schlüssel 'contenttype' sein müssen  
      # genau die Werte in den Arrayelementen mit diesem Schlüssel vergleicht.  
      # strcmp() liefert genau die Werte zurück, wie sie die benutzerspezifische  
      # Vergleichsfunktion zurückgeben muss.  
      $sort = function($a, $b) {  
          return [link:http://de.php.net/manual/de/function.strcmp.php@title=strcmp]($a['contenttype'], $b['contenttype']);  
      };  
      
      # Nehmen wir an, Dein Array ist in der Variablen $myArray enthalten,  
      # so kannst Du dieses Array nun mit uasort sortieren:  
      $success = uasort($myArray, $sort);  
      
      # Kontrollausgabe  
      var_dump($myArray);  
    
    

    liefert bei Deinen Daten das gewünschte Ergebnis.

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz,

      lieben Dank. Ich werde es versuchen.

      Danke
      Sahra

    2. Mega!!!!

      Geht, rockt und ist supi dupi

      Liebsten Gruß
      S