Ankündigung

Einklappen
Keine Ankündigung bisher.

Basename von einem Array?

Einklappen

Neue Werbung 2019

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

  • Basename von einem Array?

    Hallo zusammen,


    ich hab da ein Problem welches ich nicht ohne eure Hilfe lösen kann.

    Ich sag schon mal vielen Dank

    PHP-Code:
    <?php 
    foreach (glob('upload-gallery/*.{gif,png,jpg,jpeg,csv}'GLOB_BRACE) as $f) { 
        
    $list[filemtime($f) . '-' $f] = $f


    $keys array_keys($list); 
    rsort($keys); 

    $recent basename($list[array_shift($keys)]); // Neustes Bild wird hier korrekt ausgeben. 

    $remaining $keys// Hier soll nur der Basename der restlichen Bilder ausgegeben werden. 
    ?>
    Klug ist, wer nur die Hälfte von dem glaubt, was er hört. Weise ist, wer erkennt, welche Hälfte die richtige ist.

  • #2
    Zitat von faceless Beitrag anzeigen
    Hallo zusammen,


    ich hab da ein Problem welches ich nicht ohne eure Hilfe lösen kann.

    Ich sag schon mal vielen Dank

    PHP-Code:
    <?php
    foreach (glob('upload-gallery/*.{gif,png,jpg,jpeg,csv}'GLOB_BRACE) as $f) {
    $list[filemtime($f) . '-' $f] = $f;
    }

    $keys array_keys($list);
    rsort($keys);

    $recent basename($list[array_shift($keys)]); // Neustes Bild wird hier korrekt ausgeben.

    $remaining $keys// Hier soll nur der Basename der restlichen Bilder ausgegeben werden.
    ?>
    PHP-Code:
    print_r(array_map('basename'$a)); 

    Kommentar


    • #3
      Zitat von sboesch Beitrag anzeigen

      PHP-Code:
      print_r(array_map('basename'$a)); 
      Vielen Dank,

      ich war echt schon am verzweifeln und hatte stundenlang Google bemüht.
      Hab es dann so angepasst, wie es für mich passt:
      PHP-Code:
      $remaining json_encode(array_map('basename'$keys)); 
      Ich dachte mir schon, dass es was mit "array_map" zutun haben könnte, aber das ich dort auch "basename" nutzen kann, war mir nicht bewusst.
      Klug ist, wer nur die Hälfte von dem glaubt, was er hört. Weise ist, wer erkennt, welche Hälfte die richtige ist.

      Kommentar


      • #4
        Ohne den Umfang deiner Anwendung zu überblicken denke ich ein Blick auf krsort lohnt hier um das Hantieren mit den Schlüsseln einzusparen.
        Womöglich kann auch basename gleich im foreach mit erledigt werden. Kann nicht beurteilen, ob der Pfad woanders noch benötigt wird.

        Kommentar


        • #5
          Zitat von jspit Beitrag anzeigen
          Ohne den Umfang deiner Anwendung zu überblicken denke ich ein Blick auf krsort lohnt hier um das Hantieren mit den Schlüsseln einzusparen.
          Womöglich kann auch basename gleich im foreach mit erledigt werden. Kann nicht beurteilen, ob der Pfad woanders noch benötigt wird.
          Vielen Dank,

          ich denke auch das man es performanter / logischer lösen kann. Es geht um eine Bilder Gallery, dort wird das aktuellste Bild in groß angezeigt, alle anderen als Thumbnail angezeigt, dass funktioniert alles recht gut.
          Benötigt wird nur der Dateiname der Bilder. Sortiert werden soll absteigend nach Upload-Datum.

          Wäre das sol performanter?
          PHP-Code:
          <?php
          foreach (glob('upload-gallery/*.{gif,png,jpg,jpeg,csv}'GLOB_BRACE) as $f) {
          $list[filemtime($f) . '-' $f] = basename($f);
          }

          $keys array_keys($list);
          rsort($keys);

          $recent $list[array_shift($keys)]; // Neustes Bild.

          $remaining json_encode(array_map('basename'$keys));  // Restlichen Bilder.
          ?>
          Klug ist, wer nur die Hälfte von dem glaubt, was er hört. Weise ist, wer erkennt, welche Hälfte die richtige ist.

          Kommentar


          • #6
            Ich meine das ganze mit den Schlüsseln rauswerfen (Edit: Diese nur noch für die Sortierung nutzen), da die Array-Werte ja jetzt schon den Basenamen haben.
            PHP-Code:
            foreach (glob('upload-gallery/*.{gif,png,jpg,jpeg,csv}'GLOB_BRACE) as $f) {
              
            $list[filemtime($f) . '-' $f] = basename($f);
            }

            krsort($list);

            $recent array_shift($list);   // Neustes Bild.

            $remaining json_encode(array_values($list)); // Restliche Bilder. 

            Kommentar


            • #7
              Ja genau,
              PHP-Code:
              ksort($list); 
              durch
              PHP-Code:
              krsort($list); 
              ersetzt und alles läuft super. Danke dir!
              Klug ist, wer nur die Hälfte von dem glaubt, was er hört. Weise ist, wer erkennt, welche Hälfte die richtige ist.

              Kommentar


              • #8
                Ich hab das noch einmal modifiziert, was haltet ihr davon?
                Dadurch werden nur echte Bilddateien ausgegeben:

                PHP-Code:
                $files array_filter(glob('upload-gallery/*'), 'is_file');
                if (
                count($files) > 0) {
                $finfo finfo_open(FILEINFO_MIME_TYPE);
                foreach (
                $files as $file) {
                if (
                in_array(finfo_file($finfo$file), array('image/jpeg''image/gif''image/png'))) {
                $list[filemtime($file) . '-' $file] = basename($file);
                }
                }
                krsort($list);
                $recent array_shift($list);
                $remaining json_encode(array_values($list));
                finfo_close($finfo);

                Klug ist, wer nur die Hälfte von dem glaubt, was er hört. Weise ist, wer erkennt, welche Hälfte die richtige ist.

                Kommentar


                • #9
                  PHP-Code:
                  if (in_array(finfo_file($finfo$file), array('image/jpeg''image/gif''image/png'))) 
                  hier prüfst du gegen ob die Datei auch ein Bild ist. Ich fand das mit dem Filter in glob besser, du musst halt die Endung csv dort herausnehmen.
                  wie hier
                  PHP-Code:
                  glob('upload-gallery/*.{gif,png,jpg,jpeg, GIF, PNG, JPG, JPEG}'GLOB_BRACE

                  Kommentar


                  • #10
                    Zitat von protestix Beitrag anzeigen
                    PHP-Code:
                    if (in_array(finfo_file($finfo$file), array('image/jpeg''image/gif''image/png'))) 
                    hier prüfst du gegen ob die Datei auch ein Bild ist. Ich fand das mit dem Filter in glob besser, du musst halt die Endung csv dort herausnehmen.
                    wie hier
                    PHP-Code:
                    glob('upload-gallery/*.{gif,png,jpg,jpeg, GIF, PNG, JPG, JPEG}'GLOB_BRACE
                    Nur Dateien mit bestimmter Endung zu untersuchen macht sicher Sinn.

                    Eine weitere Validierung der Datei als Bild halte ich aber nicht für falsch, ob da der MIME typ hinreichend ist, oder ob sowieso skaliert wird und potentielle exif Daten gelöscht werden,
                    mag jeder für sich, je nach aktueller Anforderung entscheiden.

                    Kommentar

                    Lädt...
                    X