Ankündigung

Einklappen
Keine Ankündigung bisher.

Multidimensionales Array assoziativ sortieren.

Einklappen

Neue Werbung 2019

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

  • Multidimensionales Array assoziativ sortieren.

    Hallo,

    mein Ziel ist es ein Verzeichnis auszulesen und dann die Dateinamen nach Datum geordnet auszugeben (die neuesten 5).

    Das einlesen sieht so aus:

    PHP-Code:
    <?php$dir = 'Files';
    $handle = opendir ($dir);
    $files = array(
       "zeit" => array (),
       "dateiname" => array ()
       );
       $i = 0;
    while ($file = readdir ($handle)){
       if ($file != "." AND $file != ".." AND $file != "Sonstiges")
              $files[dateiname][$i] = $file;
              $files[zeit][$i]=filectime($dir.'/'.$files[dateiname][$i]);
              $i++;
    }
    closedir($handle);

    ?>
    Nun soll das Array sortiert werden nach dem filectime.
    Wie mache ich das?

    Mit rsort ordnet er mir zwar die Zeiten richtig, aber assoziiert nicht die Dateinamen. Wenn ich dann die Top 5 ausgeben will stehen zwar die richtigen Daten da aber nur die Dateinamen nach ihren normalen Array Index geordnet

  • #2
    Du mußt eben die Zeit mit dem Dateinamen verknüpfen. Wie wärs mit:
    Code:
    while {
      $files[$file] = filectime($dir.'/'.$file);
    }
    arsort($files);
    reset($files);

    Kommentar


    • #3
      Danke habe aber immernoch probleme
      beim code:

      PHP-Code:
      <?php

      while ($file readdir ($handle)){
         if (
      $file != "." AND $file != ".." AND $file != "Sonstiges" AND $file != ".htaccess"){

          
      $files[filectime($dir.'/'.$file)] =  $file;
              
      $i++;


      }

      ?>
      befindet sich komischwerweise nur ein Bruchteil der im Verzeichgnis vorhandenen Dateien im array. warum?

      Kommentar


      • #4
        Was heißt das, er nimmt sie nicht an?

        Wie heißen denn deine Dateien? Notfalls md5-Checksumme des Dateinamens als Index verwenden mit
        md5($file)
        und in einem Hilfs-Array die Zuordnung von Checksumme und Dateiname wiederherstellen.

        Kommentar


        • #5
          Komischerweise sind hier alle Dateinamen im array:

          PHP-Code:
          <?php
          <?php 

          while ($file readdir ($handle)){ 
             if (
          $file != "." AND $file != ".." AND $file != "Sonstiges" AND $file != ".htaccess"){ 

             
          $files[$i] =  $file
                  
          $i++; 




          ?>
          ?>

          Kommentar


          • #6
            Welche sind denn drinne die du nicht drinne haben willst? Du schließt ja offenbar nur ., .., .htaccess & (den Ordner) Sonstiges aus?!

            Kommentar


            • #7
              Ich denke mal, dass wohl mehrere Dateien den gleichen Timestamp haben. Versuch das ganze mal so zu sortieren:
              PHP-Code:
              <?php
              usort
              ($filescreate_function('$value_1, $value_2''global $dir; return filectime($dir.\'/\'.$value_1) - filectime($dir.\'/\'.$value_2);'));
              ?>

              Kommentar


              • #8
                Ist bei meiner Lösung ja egal, aber deine sieht auch interessant aus.

                Kommentar


                • #9
                  Zitat von Zergling
                  Ist bei meiner Lösung ja egal
                  Sicher?

                  Was erhältst Du denn, wenn Du das ganze z.B. so schreibst:
                  PHP-Code:
                  <?php
                  touch
                  ($file12345678901234567890);
                  $files[filectime($dir.'/'.$file)] =  $file
                  ?>

                  Kommentar


                  • #10
                    Ich weiß nicht ob du mich mit dem Threadstarter verwechselst, aber ich benutze als Array-Index nicht den Zeitstempel, sondern den Dateinamen.

                    Und da er keinen Ordner einbezieht, dessen Name wie der einer Datei im selben Ordner lautet, dürfte in keinem Fall eine Datei "verschluckt" werden.

                    Kommentar


                    • #11
                      Sorry, das war mein Fehler! Habe im falschen Post gelesen.

                      Kommentar


                      • #12
                        Zitat von Zergling
                        Welche sind denn drinne die du nicht drinne haben willst? Du schließt ja offenbar nur ., .., .htaccess & (den Ordner) Sonstiges aus?!
                        aah ja klar,manche haben den selben Timestamp und da wird das Array an dem Index immer wieder überschrieben.

                        aber wie löse ich das Problem, dass mir der Index (den ich ja brauche weil er eine Angabe beinhaltet die ich nachher ausgeben will) mit dem rsort nicht kaputt geht?

                        Kommentar

                        Lädt...
                        X