Ankündigung

Einklappen
Keine Ankündigung bisher.

leere Felder zuunterst

Einklappen

Neue Werbung 2019

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

  • leere Felder zuunterst

    Hallo alle miteinander.
    Ich knüble seit Stunden an folgendem Problem:
    Ich habe einen Array, den ich nach einer Kollonne sortiere. Funktioniert. Aber leider sind die Daten mit leeren Felder (also ' ' ) zuoberst, ich möchte sie aber zuunterst haben.

    Kennt jemand eine Lösung zu diesem Problem?

    Mein Code:
    PHP-Code:
    <?php
    function compareByColumn$col )
        {
        return function( 
    $a$b ) use ( $col )
          { 
                 if (
    ctype_alpha($a[$col])) {      
                           return 
    strcmp($a[$col], $b[$col]); 
                 } else {
          
                    return 
    $a[$col] - $b[$col]; 
                 }
                              };
        } 

    if ((
    $handle fopen("adressen.csv""r")) !== FALSE
    {
        
    $rows = array();
        while ((
    $data fgetcsv($handle1000";")) !== FALSE
       
              {
            
    $rows[] = $data;
        }
     
        
    usort$rowscompareByColumn) ); 
        
        foreach (
    $rows as $key) {
            
        echo 
    "<table width=600> <td width=20>"  .$key[0]. "</td> <td width=50>" .$key[1] . "</td><td width=70>" .$key[2] . "</td> <td width=70>" .$key[3] . "</td> <td width=70>" .$key[4]. "</td> </table> "; } 
      }
    ?>

  • #2
    Kennt jemand eine Lösung zu diesem Problem?
    Ähm, ein leerer String wird natürlich vor einem 'a' einsortiert, ist vollkommen logisch.. wenn du das anders willst, musst du es entsprechend anders programmieren in deiner Vergleichsfunktion
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      ja eben, für das suche ich eine Lösung. Hat jemand einen konkreten Tipp?
      Wäre sehr dankbar!

      Kommentar


      • #4
        Dir wird wohl nichts weiter übrig bleiben als deine Spezialfälle $a == "" und $b == "" in deiner Vergleichsfunktion gesondert zu behandeln und den returnwert zu setzen.

        Kommentar


        • #5
          Vielleicht so:
          PHP-Code:
          <?php 
          function sortempty$a$b ) {
              return empty( 
          $a );
          }
          function 
          compareByColumn$col 
              { 
              return function( 
          $a$b ) use ( $col 
                {  
                       if (
          ctype_alpha($a[$col])) {       
                                 return 
          strcmp($a[$col], $b[$col]);  
                       } else { 
                 
                          return 
          $a[$col] - $b[$col];  
                       } 
                                    }; 
              }  

          if ((
          $handle fopen("adressen.csv""r")) !== FALSE)  

              
          $rows = array(); 
              while ((
          $data fgetcsv($handle1000";")) !== FALSE)  
              
                    { 
                  
          $rows[] = $data
              } 
                
          usort$rows'sortempty' );
              
          usort$rowscompareByColumn) );  
               
              foreach (
          $rows as $key) { 
                   
              echo 
          "<table width=600> <td width=20>"  .$key[0]. "</td> <td width=50>" .$key[1] . "</td><td width=70>" .$key[2] . "</td> <td width=70>" .$key[3] . "</td> <td width=70>" .$key[4]. "</td> </table> "; }  
            } 
          ?>

          Kommentar


          • #6
            funktioniert bei mir nicht.
            Hat jemand eine bessere Idee?
            Danke für eure Hilfe!

            Kommentar


            • #7
              Ich liefere mal ein Beispiel zu meiner Bemerkung #4 nach, welches mit Absicht nur den Grundgedanken widerspiegelt und auch nicht ausgetestet ist:
              PHP-Code:
              <?PHP
              $a 
              = array("aa","ab","de","ce","","z","",'45','99','ce');

              usort($a,function($a$b){ 
                if(
              $a == '') return 1;
                if(
              $b == '') return -1;
                return 
              $a $b : -1;
              });

              var_dump($a);
              Ausgabe
              Code:
              array(10) {
                [0]=>
                string(2) "45"
                [1]=>
                string(2) "99"
                [2]=>
                string(2) "aa"
                [3]=>
                string(2) "ab"
                [4]=>
                string(2) "ce"
                [5]=>
                string(2) "ce"
                [6]=>
                string(2) "de"
                [7]=>
                string(1) "z"
                [8]=>
                string(0) ""
                [9]=>
                string(0) ""
              }
              Onlinetest hier

              LG jspit

              Kommentar


              • #8
                Vielen Dank jspit!
                Das Problem ist, dass ich ja beide Bedingungen gleichzeitig brauche. Ich müsste die Kolonne einstellen können (mach ich mit: compareByColumn( 4 ) ) und gleichzeitig auch noch die Bedingung, dass die leeren Felder zuoberst sein sollen.
                Nun schaffe ich einfach nicht, das richtig zusammenzubauen. Hat mir jemand eine genauere Beschreibung?
                Den Code habe ich eben auch schon irgendwo gefunden, aber ich kann ihn nicht am richtigen Ort einbauen oder die Codes so zusammenbauen, dass ich die Kolonne nach der sortiert werden soll habe und gleichzeitig diesen Code von jspit.
                Sieht jemand die Lösung?

                Kommentar


                • #9
                  Code benutzen zu wollen welchen du nicht verstehst bringt dich nicht voran.
                  Da hilft nur -> Lerne Grundlagen | Quellensammlung.

                  Kommentar


                  • #10
                    Zitat von winter Beitrag anzeigen
                    ich möchte sie aber zuunterst haben.
                    Zitat von winter Beitrag anzeigen
                    dass die leeren Felder zuoberst sein sollen.
                    Was denn nun
                    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                    Kommentar

                    Lädt...
                    X