array_multisort Verständnisfrage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • array_multisort Verständnisfrage

    Ich habe folgenden Code
    PHP-Code:
    $adresse[] = array ( 'vorname' => "hans"'nachname' => "schmidt"'datum' => 1993 );
    $adresse[] = array ( 'vorname' => "karl"'nachname' => "schmidt"'datum' => 1963 );
    $adresse[] = array ( 'vorname' => "maria"'nachname' => "schmidt"'datum' => 1964 );
    $adresse[] = array ( 'vorname' => "karla"'nachname' => "meier"'datum' => 1999 );
    echo 
    '<pre>';
    foreach ( 
    $adresse as $index => $inhalt )
    {
        
    $vorname[$index] = $inhalt['vorname'];
        
    $nachname[$index] = $inhalt['nachname'];
        
    $datum[$index] = $inhalt['datum'];
    }
    array_multisort ($datumSORT_DESC$adresse);
    print_r($adresse); 
    Warum muss ich bei array_multisort noch als letzten Parameter $adresse eingeben?
    Erst wird ja das Datum sortiert, woher kommt dann wieder der Zusammenhang, also dass das sortierte Datum passend zu den restlichen Daten ist?

  • #2
    array_multisort() sortiert zuerst $datum entsprechend des angegebenen SORT_DESC und dann $adresse anhand des gemeinsamen Schlüssels beider Arrays, welcher "datum" ist. Entspricht Beispiel #3 im Manual.

    Kommentar


    • #3
      Das Beispiel hatte ich schon gesehen, nur mit dem gemeinsamen Schlüssel, das wurde nicht so gut erklärt.
      Jetzt habe ich es verstanden, danke!

      Kommentar


      • #4
        Hier mal eine Alternative zu multisort:
        PHP-Code:
          function cmp_by_spalte_numerisch($spalte$sortierrichtung SORT_ASC)
          {
                 
        $richtung SORT_ASC === $sortierrichtung?1:-1
                 return function (
        $a,$b) use ($spalte,$richtung)
                        {     
                              return (
        $a[$spalte] - $b[$spalte]) * $richtung;
                        };   
          }


          function 
        cmp_by_spalte_string($spalte,$sortierrichtung SORT_ASC)
          {
                 
        $richtung SORT_ASC === $sortierrichtung?1:-1
                 return function (
        $a,$b) use ($spalte,$richtung)
                        {
                              return 
        strcmp($a[$spalte],$b[$spalte]) * $richtung;
                        };   
          }

        $adresse[] = array ( 'vorname' => "hans"'nachname' => "schmidt"'datum' => 1993 );
        $adresse[] = array ( 'vorname' => "karl"'nachname' => "schmidt"'datum' => 1963 );
        $adresse[] = array ( 'vorname' => "maria"'nachname' => "schmidt"'datum' => 1964 );
        $adresse[] = array ( 'vorname' => "karla"'nachname' => "meier"'datum' => 1999 );



         

        usort($adresse,cmp_by_spalte_numerisch('datum',SORT_DESC));
        //usort($adresse,cmp_by_spalte_string('vorname')); //SORT_ASC 
        Wir werden alle sterben

        Kommentar

        Lädt...
        X