Ankündigung

Einklappen
Keine Ankündigung bisher.

Sortierung eines Arrays

Einklappen

Neue Werbung 2019

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

  • Sortierung eines Arrays

    Hallo.

    Ich habe folgendes Array:

    Code:
      [0] => Array
      (
          [a] => apfel
          [b] => 0
          [c] => Array
              (
                  [filename] => test
                  [groesse] => 103809 KB
              )
      )
      
      [1] => Array
      (
          [a] => zitrone
          [b] => 1
          [c] => Array
              (
                  [filename] => egal
                  [groesse] => 22809 KB
              )
      )
      
      [2] => Array
      (
          [a] => Apfel
          [b] => 2
          [c] => Array
              (
                  [filename] => test
                  [groesse] => 4525 KB
              )
      )
      
      [3] => Array
      (
          [a] => Zitrone
          [b] => 3
          [c] => Array
              (
                  [filename] => bild
                  [groesse] => 2009 KB
              )
      )
    Dieses Array möchte ich sortieren, aber sort() gibt mir eine Sortierung abhängig von der Groß-/Kleineschreibung raus:

    1. Apfel
    2. Zitrone
    3. apfel
    4. zitrone

    Ich möchte aber, dass "Apfel" und "apfel" gleichwertig behandelt werden:

    1. Apfel
    2. apfel
    3. Zitrone
    4. zitrone

    Nutze ich usort mit "strcasecmp" erhalte ich die Fehlermeldung, dass die Konvertierung Array zur String fehlgeschlagen ist.

    Irgendwie stehe ich jetzt auf dem Schlauch. Jemand einen Tipp für mich?

    cya

  • #2
    Naja, du übergibst scheinbar das innere Array als Parameter für eine Callback. strcasecomp erwartet aber ein String. Du musst also irgendwie auf das erste Element zugreifen. Das geht beispielsweise direkt mit einer eigenen Funktion, oder du nimmst eine anonyme Funktion.

    PHP-Code:
    function my_compare ($array1$array2)
    {
      return (
    strcasecmp ($array1['a],$array2['a']));
    }

    $myArray = usort ($myArray, '
    my_compare'); 
    oder anonym:
    PHP-Code:
    $my_compare create_function ('$a,$b'' return strcasecmp($a["a"],$b["b"]);');
    myArray usort ($myArray$my_compare); 
    Ungetestet

    Kommentar


    • #3
      Danke, ich probiere es aus...

      cya

      Kommentar


      • #4
        sort(strtolower($aArray);
        Leider nicht.
        Aber so sollte es Funktionieren:
        PHP-Code:
        <?php

        array_map
        ('strtolower'$aArray);

        ?>
        Ein Test:
        PHP-Code:
        <?php

        $aArray
        []['a'] = 'Apfel'
        $aArray[]['a'] = 'apfel';
        $aArray[]['a'] = 'Birne';
        $aArray[]['a'] = 'birne';
        $aArray[]['a'] = 'Zitrone';

        array_map('strtolower'$aArray);

        echo 
        '<pre>';
        var_dump($aArray);
        echo 
        '</pre>';

        ?>
        Ergebniss:
        Code:
        array(5) {
          [0]=>
          array(1) {
            ["a"]=>
            string(5) "Apfel"
          }
          [1]=>
          array(1) {
            ["a"]=>
            string(5) "apfel"
          }
          [2]=>
          array(1) {
            ["a"]=>
            string(5) "Birne"
          }
          [3]=>
          array(1) {
            ["a"]=>
            string(5) "birne"
          }
          [4]=>
          array(1) {
            ["a"]=>
            string(7) "Zitrone"
          }
        }

        Kommentar


        • #5
          strtolower erwartet auch Strings (wie der Name schon sagt ). Es handelt sich hier aber um ein Array aus Arrays, wobei das äussere Array so sortiert werden soll, dass der erste Eintrag der inneren Arrays sortiert sind.

          Btw: Was spricht gegen assoziatives Array?

          Kommentar


          • #6
            Darf ich fragen warum der Array überhaupt so blöd aufgebaut ist?
            Dimension 1 hat numerische Indexe, könnte man hier nicht bereits einen eindeutigen Key verwenden, nach dem nun auch sortiert werden könnte?
            Dann die 2. Dimension, a, b, c, .. als Keys zu verwenden ist doch Banane, nimm dann doch dort lieber aussagekräftigere Keys.
            Key b ist total überflüßig, zumindest in dieser Reihe hier.
            Einzig bei filename und groesse hast du sinnvolle Benennung, leider in einem extra Array.

            Kommentar

            Lädt...
            X