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

  • winter
    hat ein Thema erstellt leere Felder zuunterst.

    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> "; } 
      }
    ?>

  • lstegelitz
    antwortet
    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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • winter
    antwortet
    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?

    Einen Kommentar schreiben:


  • jspit
    antwortet
    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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • wonder
    antwortet
    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> "; }  
      } 
    ?>

    Einen Kommentar schreiben:


  • jspit
    antwortet
    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.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    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

    Einen Kommentar schreiben:

Lädt...
X