Ein array sortiert in eine Datei schreiben - wie?

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

  • Ein array sortiert in eine Datei schreiben - wie?

    Wie kann man das folgende Array nach dem Datum sortieren?
    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    0] => a
                
    [1] => b
                
    [2] => 02.04.08   
            
    )

        [
    2] => Array
            (
                [
    0] => xy
                
    [1] => df
                
    [2] => 01.04.08    
            
    )

        [
    3] => Array
            (
                [
    0] => h
                
    [1] => dd
                
    [2] => 01.03.08    
            
    )


  • #2
    usort()+Callbackfunktion
    Wäre in diesem Falle dann aber einfacher wenn du Unix Timestamp hättest und nicht das Datumsformat. Falls es nur mit Datum möglich ist, dann muss deine Compare Funktion erst die Timestamps erstellen, damit der Vergleich einfacher geht.

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      PHP-Code:
      $sortMe = array(array('a','b','02.04.08'),array('xy','df','01.04.08'),array('h','dd','01.03.08'));
      $sortCol = array();
      foreach (
      $sortMe as $key => $row) {
          
      $tmp explode('.',$row[2]);
          
      $sortCol[$key] = strtotime($tmp[2].'-'.$tmp[1].'-'.$tmp[0]);
      }
      array_multisort($sortColSORT_ASC$sortMe); 
      Da ich mir spontan nicht sicher war, was strtotime aus einem Datumsstring im Format "01.04.08" macht, hab ich den noch in "08-04-01" umgewandelt, da strtotime das auf jedenfall frisst und entsprechend einen UNIX-Timestamp ausspuckt. Kann sein, dass diese Stringumformung unnötig ist, in diesem Fall kann man die zwei Zeilen der foreach-Schleife einfach durch diese hier ersetzen:

      PHP-Code:
          $sortCol[$key] = strtotime($row[2]); 

      Kommentar


      • #4
        @b0mbe
        You are great! :-)

        Thanks a lot.

        Kommentar


        • #5
          Innerhalb der foreach-Schleife könnte man so noch 'ne Zeile sparen:

          PHP-Code:
          $sortCol[$key] = strtotime(implode('-',array_reverse(explode('.',$row[2])))); 
          Ob das unbedingt schneller oder sonstwie besser ist, sei dahingestellt. Könnte man ja zur Not noch testen ;-)

          Kommentar


          • #6
            In der Zeile x und y bekomme ich so viele offset Meldungen wie Zeilen durchlaufen werden. Was bedeuten diese "Undefined offset:" und wie werde ich diese Meldungen los?
            Notice: Undefined offset: 2 in /var/www/web22/web/get/lies.php on line 30

            Notice: Undefined offset: 1 in /var/www/web22/web/get/lies.php on line 30
            PHP-Code:
            foreach ($sortMe as $key => $row) {
            x  -->  $tmp explode('.',$row[2]);
            y  -->      $sortCol[$key] = strtotime(implode('-',array_reverse(explode('.',$row[2]))));
            }
            array_multisort($sortColSORT_ASC$sortMe); 
            Zuletzt geändert von janein; 06.04.2008, 11:59.

            Kommentar


            • #7
              Was bedeuten diese "Undefined offset:" und wie werde ich diese Meldungen los?
              Können wir dir nicht sagen. Denn der Fehlermeldung nach unterscheidet sich sowohl der gepostete Code als auch dein Array von der ursprünglichen Problemstellung. Den zweiten Hinweis von b0mbre hast du wohl noch nicht einmal richtig gelesen. Undefined Offset heißt, dass du einen Zugriff auf einen Arrayindex machst der nicht existiert - in diesem Fall 2. Im Ausgangsarray existierte dieser Index noch:
              Code:
              Array (... [2] => 02.04.08)
              Grundlagen!
              Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

              Kommentar


              • #8
                Ein array sortiert in eine Datei schreiben - wie?

                Hiermit wird das array sortiert:
                PHP-Code:
                foreach ($sortMe as $key => $row) {
                    
                x  -->  $tmp explode('.',$row[2]);
                    
                y  -->      $sortCol[$key] = strtotime(implode('-',array_reverse(explode('.',$row[2]))));
                    }
                    
                array_multisort($sortColSORT_ASC$sortMe); 
                Hier mit wird es in eine Datei geschrieben:
                PHP-Code:
                    for ($i 0$i $size$i++)
                        {
                            
                $size1count($result[$i]);
                                if(isset(
                $result[$i][0]) && isset($result[$i][1]) && isset($result[$i][2])
                                && isset(
                $result[$i][3]) && isset($result[$i][4]) && ($result != ""))
                                {
                                
                $zeilen =  "<a href=\"".$result[$i][0]."\">".$result[$i][1]."</a> - 
                                    <span style=\"font-size: 10px; color: grey;\"><b>"
                .$result[$i][4]."</b> 
                                            ["
                .$result[$i][3]."] ".$result[$i][2]."</span><br>";
                    
                $result[] =  array_multisort($sortColSORT_DESC$sortMe);


                                        
                fputs($fp"$zeilen \n");

                                }
                        }
                        
                fclose($fp); 
                Doch leider ist das Array in der Datei wieder unsortiert. Wie kann man das Array sortiert in eine Datei schreiben?

                Kommentar


                • #9
                  nach dem Sortieren musst du mit foreach durchlaufen und speichern, dann hast du einen sortierten Array in der Datei, denn es wird zwar sortiert aber die Indizes nicht verändert.

                  Kommentar


                  • #10
                    Original geschrieben von asp2php
                    nach dem Sortieren musst du mit foreach durchlaufen und speichern, dann hast du einen sortierten Array in der Datei, denn es wird zwar sortiert aber die Indizes nicht verändert.
                    Ich möchte aber bestimmte Teile während des Schreibens verändern, wie aus dem Code entnehmen ist. Das geht doch mit foreach nicht, oder was meinst Du mit speichern?

                    Kommentar


                    • #11
                      Du musst nur den Schleifenkopf ersetzen:
                      PHP-Code:
                      for ($i 0$i $size$i++)
                      // wird zu:
                      foreach( $result as $i=>$value 
                      Dann sollte das klappen. Warum das so ist, verrät dir das Manual und var_dump!

                      Kommentar


                      • #12
                        Den Schleifenkopf habe ich ersetzt, nur das Ergebnis in der Datei ist immer noch unsortiert.

                        Hat jemand noch einen Vorschlag und eine Erklärung?

                        Kommentar


                        • #13
                          In dieser Zeile klapt es mitt isset.
                          PHP-Code:
                            $tmp explode('.',isset($row[2])); 
                          Die zweite Meldung werde ich nicht los. Sobald ich $row[2] in
                          PHP-Code:
                          $sortCol[$key] = strtotime(implode('-',array_reverse(explode('.',$row[2])))); 
                          überprüfe erscheint eine "array inconsistent" Meldung oder das Array ist wieder unsortiert?

                          Kommentar


                          • #14
                            Und wie hast du gemacht, oder sollen wir ein Ratespiel starten

                            Kommentar


                            • #15
                              Gut immer weiter so, ignorier einfach was andere hier im Forum schreiben, ist ja eh meistens nicht richtig.
                              $tmp = explode('.',isset($row[2]));
                              b0mbre schrieb "könnte man so noch 'ne Zeile sparen" - diese Zeile ist also absolut unnötig und zudem noch absoluter Quatsch.
                              überprüfe erscheint eine "array inconsistent" Meldung oder das Array ist wieder unsortiert?
                              Dazu nochmals folgendes:
                              Undefined Offset heißt, dass du einen Zugriff auf einen Arrayindex machst der nicht existiert - in diesem Fall 2. Im [von dir ganz am Anfang geposteten] Ausgangsarray existierte dieser Index noch:
                              Code:
                              Array (... [2] => 02.04.08)
                              Das wiederum heißt seit dem ersten Post hast du dein Array verändert. Gib das Array nochmals mit print_r aus und poste es hier.
                              Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                              Kommentar

                              Lädt...
                              X