Ein array sortiert in eine Datei schreiben - wie?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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)

    Comment


    • #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]); 

      Comment


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

        Thanks a lot.

        Comment


        • #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 ;-)

          Comment


          • #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); 
            Last edited by janein; 06-04-2008, 10:59.

            Comment


            • #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]

              Comment


              • #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?

                Comment


                • #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.

                  Comment


                  • #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?

                    Comment


                    • #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!

                      Comment


                      • #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?

                        Comment


                        • #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?

                          Comment


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

                            Comment


                            • #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]

                              Comment

                              Working...
                              X