Felix Riesterer: Array sowohl nach Schlüssel als auch nach Wert sortieren

Beitrag lesen

Lieber molily,

Wenn du bei uksort den Schlüssel hast, kommst du doch einfach an den Wert…?

das setzt voraus, dass die Callback-Funktion irgendwie auf das zu sortierende Array zugreifen kann. Das kann sie aber nicht, da ich nicht mit globalen Variablen arbeite und das Array im Kontext einer Funktion als lokale Variable (und nicht als Eigenschaft eines Objektes) auftritt. Die Vergleichsfunktion (Callback) bekommt nur zwei Elemente übermittelt, entweder Werte (uasort), oder Schlüssel (uksort).

Beispiel:

class WhatEver {  
  
    public  function cb ($a, $b) {  
        // kein Zugriff auf $sort_me!  
        if (is_string($a) && is_string($b)) {  
            return strnatcasecmp($a, $b);  
        }  
  
        return 0;  
    }  
  
    public  function hook ($param) {  
        $t = $this;  
  
        $a = $t->do_whatever();  
  
        // more code here  
    }  
  
    private function do_whatever () {  
        $t = $this;  
  
        $sort_me = array(  
            'x' => '',  
            'm' => array(),  
            'f' => array(),  
            'g' => ''  
        );  
  
        uasort($sort_me, array($t, 'cb')); // cb erhält Schlüssel (Strings)  
        uksort($sort_me, array($t, 'cb')); // cb erhält Werte (Leerstrings und Arrays)  
  
        return $sort_me;  
    }  
}

Durch den Aufruf von *sort-Funktionen wird das übergebene Array selbst verändert, anstatt es so zu belassen und das sortierte Array als Rückgabewert zu liefern. Ich mag diese Inkonsistenz in PHP nicht besonders, dass es Funktionen gibt, die als Rückgabewert die ausgeführte Operation liefern, während andere nur eine boolsche Rückmeldung über (Miß)Erfolg liefern... Gerade bei den Array-Sortierfunktionen wäre es mir wesentlich lieber gewesen, man hätte das Argument nicht verändert und dafür das Ergebnis als Rückgabewert erhalten. Bei den Stringfunktionen erhalte ich ja auch den veränderten String als Rückgabewert, anstatt dieses komischen Bool-Wertes. o_O

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
0 56

Array sowohl nach Schlüssel als auch nach Wert sortieren

Felix Riesterer
  • php
  1. 0
    tami
    1. 0
      Felix Riesterer
      1. 0
        tami
  2. 0
    tami
    1. 0
      Felix Riesterer
      1. 0
        Tom
        1. 0
          Felix Riesterer
  3. 0
    Tom
    1. 0

      sowohl nach Schlüssel als auch nach Wert sortieren, Nachtrag

      Tom
      1. 0
        Felix Riesterer
        1. 0
          Tom
          1. 0
            Tom
            1. 0

              Denkfehler zurückgenommen

              Tom
  4. 0
    molily
    1. 0
      Felix Riesterer
  5. 1
    tami
    1. 0
      Tom
      1. 0

        Closures in PHP

        tami
        1. 0
          Tom
          1. 0

            Closures in PHP vs. Javascript - warum "use" ? @molily

            tami
            1. 0
              Tom
              1. 0
                tami
          2. 0
            dedlfix
          3. 2
            Sven Rautenberg
          4. 0
            molily
            1. 0

              Closures in PHP - PHP ist eine "Scheißsprache" ... ???

              tami
              1. 0
                molily
                1. 0
                  tami
            2. 0

              PHP ist eine Scheißsprache - PHP sucks - so what ...

              tami
              1. 0
                molily
                1. 0
                  tami
              2. 0
                Tom
                1. 0
                  molily
                  1. 0
                    molily
                  2. 0
                    Felix Riesterer
                    1. 0
                      Tom
                2. 0
                  Felix Riesterer
              3. 0

                PHP ... "while it's not perfect, it works..."

                tami
            3. 0
              Sven Rautenberg
              1. 0
                Felix Riesterer
                1. 0
                  Tom
                  1. 0
                    Tom
                2. 0
                  tami
                  1. 0
                    molily
                    1. 0
                      tami
                      1. 0
                        Tom
                      2. 0
                        molily
                        1. 0
                          tami
                          1. 0
                            molily
                            1. 0
                              Tom
                        2. 0
                          Tom
                          1. 0

                            Changelogs von PHP

                            dedlfix
                            1. 0
                              Tom
        2. 0
          tami
    2. 0

      Gelöst! Danke!

      Felix Riesterer