Ankündigung

Einklappen
Keine Ankündigung bisher.

Array: Nur einen bestimmten Teil ausgeben

Einklappen

Neue Werbung 2019

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

  • Array: Nur einen bestimmten Teil ausgeben

    Moin,

    ich lesen Dateinamen in ein Array ein und möchte dann nur bestimmte Namen wieder ausgeben (Ist ein Bildergallerie Script, alle Bilder werden auf mehrer Seite verteilt und dann sollen nur die Bilder der aktuellen Seite angezeigt werden).
    Leider schaffe ich es nicht, in irgendeiner Weise einzelne Datensätze aus dem Array auszugeben, immer nur alle mit

    Code:
      foreach($arr as $key => $value)
    ,
    Code:
    echo $arr[12];
    wie ich es aus Pascal kenne geht gar nicht!
    Ich hab es schon mit
    Code:
    $prev_pics = array_slice($arr, $limitlower);
    versucht, aber da bekomme ich nur die Fehlermeldung, dass ich doch bitte nen Array einlesen soll - was ich meiner Meinung nach aber tue!!!

    Was läuft da falsch?

  • #2
    Code:
    <pre>
    <?php
    $pic_files = array('bild 1', 'bild 2', 'bild 3', 'bild 4');
    $offset = 1;
    $lenght = 2;
    $pics_on_this_page = array_slice($pic_files, $offset, $lenght);
    print_r($pics_on_this_page);
    echo "\n";
    echo $pics_on_this_page[0];
    echo "\n";
    echo $pics_on_this_page[1];
    echo "\n";
    foreach ($pics_on_this_page as $pic_file) {
     
        echo $pic_file;
        echo "\n";
    }
    ?>
    </pre>
    Wahrscheinlich hast du nur ein Fehler in deinem Array...

    Basti

    Kommentar


    • #3
      HI,

      ich lese meinen Array folgendermaßen ein:

      Code:
       while ($file = readdir ($verz)) 
        { 
      
      	 if($file != "." && $file != ".." && $file != $filename) 
           { 
            array_push ($linkl, "$file"); // Der Dateiname wird in den Array $linkl geschrieben 
           } 
          }
         }
      Wenn ich array_slice anwende (wie gepostet), bekomme ich die Fehlermeldung:
      Warning: array_slice(): The first argument should be an array in ./gallerie.php on line 154
      Genauso beim foreach,
      Warning: Invalid argument supplied for foreach() in ./gallerie.php on line 157

      Ohne das array_slice kann ich aber alle Werte des Array mit foreach ausgeben... Kann es am array_push liegen???

      Kommentar


      • #4
        Hast du $link1 bzw. $arr denn nicht als Array deklariert? In dem Fall solltest du dein Error Reporting Level hochsetzen, dann passieren solche Fehler i.d.R. nicht.

        Gib dir den Inhalt der entsprechenden Vars einfach mal mit print_r() oder var_dump() aus.

        Noch was:

        Es sollte heißen:
        Code:
        while (true == ($file = readdir($dir))) {
        ...denn sonst bricht die Schleife ab, falls eine Datei z.B. den Namen '0' trägt.

        Basti

        Kommentar


        • #5
          Was genau das angbliche Array ist kannst Du mit var_dump() oder print_r() ausgeben lassen.
          An array_push() dürfte es nicht liegen, wobei ich mir angewöhnt habe, Variablen immer erst als leere Arrays zu definieren, bevor ich sie als solche benutze.
          Ist auch nötig, damit es auf E_NOTICE nicht zu hässlichen Meldungen kommt.

          <?php
          $arr = array();

          array_push($arr, "bla");
          array_push($arr, "blubb");

          echo "<pre>";
          var_dump($arr);
          echo "</pre>";
          ?>
          mod = master of disaster

          Kommentar


          • #6
            Hi!

            Danke für die Antworten! Mit var_dump bekomme ich als Ausgabe NULL!!! Ich habe den Array mit
            Code:
              $linkl = array ();
            deklariert, hatte ich nur nicht mit reingeschrieben...

            Das NULL bekomme ich einmal, wenn ich den vollen array drin habe ($link1) und dann auch nochmal, wenn ich ihn mit array_slice bearbeitet habe...

            Fehlermeldung ist immer noch: First Argument should be an Array...

            Kommentar


            • #7
              null bedeutet, dass die Variable nicht nur leer, sondern gar nicht definiert ist.

              Du bist da irgendwo anders durcheinander gekommen. Vielleicht die Variable in einer Funktion benutzt, ohne sie an die Funktion zu übergeben?

              Dass Arrays an sich funktionieren sollte Dir das Beispielscript ja zeigen.
              mod = master of disaster

              Kommentar


              • #8
                Hi,

                auch wenn ich direkt nach dem einlesen mit array_push den Array mit var_dump ausgebe, zeigt er auch überall null an!
                Aber trotzdem funktioniert es, wenn ich den gesamten Array mit foreach ausgebe!

                Code:
                  foreach($linkl as $key => $value)
                Das Einzige, was ich auf dem Weg zwischen einlesen und Ausgabe mache, ich count($link1) und sort($link1)...

                Was ist denn da im Busch?

                Kommentar


                • #9
                  Da ist irgendwas im Busch, was Du uns nicht verrätst. Du hast den Code vor der Nase, wir können hier sehr frei spekulieren, woran es denn liegen könnte, aber helfen wird das nur bedingt.
                  Und bitte keine Schnipsel, sondern ein lauffähiges script (kann gekürzt sein, aber lauffähig!), wie mein Beispiel auch.

                  Das einzige, was mir spekulierenderweise noch einfällt, ist das hier:
                  Hast Du sowas wie
                  $arr = sort($arr);
                  statt
                  sort($arr);
                  gemacht?
                  mod = master of disaster

                  Kommentar


                  • #10
                    Hi,

                    nein, ich habe nur sort($arr) gemacht... Hier ist das Script in der Original Version:

                    Code:
                      // Verzeichnis wird geöffnet 
                      $verz=opendir($folder_scr); 
                    
                      // Ein Array wird erstellt in dem nachher die Dateien gespeichert werden 
                      $linkl = array (); 
                    
                      while(true == ($file = readdir ($verz))) 
                      { 
                    
                    //Alle Dateien in den Array einlesen
                        $jpegtrue = pathinfo($file);
                    	if($jpegtrue['extension'] == "jpg") 
                    	{
                        //Damit "." und ".." nicht ins Array geschrieben werden, werden sie ausgenommen. 	
                    	 if($file != "." && $file != ".." && $file != $filename) 
                         { 
                          array_push ($linkl, "$file"); // Der Dateiname wird in den Array $linkl geschrieben 
                    	 } 
                        }
                       } 
                    
                      // Anzahl der Dateien im Ordner == Anzahl der Einträge im Array 
                      $anzahl = count($linkl); 
                    
                      // Array wird nach Alphabet sortiert 
                      sort ($linkl); 
                    
                    
                    ####################################################################################################
                      foreach($linkl as $key => $value) 
                      { 
                    
                      //Thumb schon vorhanden? Wenn nein, wird er erstellt
                        if(!file_exists($des_src."/".$value)) 
                        { 
                          // erstelle ein thumb (Funktion ist weiter oben deklariert)
                          mkthumb($value, $thumbx, $thumby, $folder_scr, $des_src); 
                        } 
                      //Ausgabe der Thumbs/Des Arrays: 
                      echo "<td>";
                      echo "<a href=\"index.php?action=showpic&amp;folder=".$folder_scr."/&amp;pic=".$value."&amp;event=".$fileplace."\">\n";
                      echo "[img].$des_src.[/img]</a>\n";
                      echo "
                    ".round((filesize($folder_scr."/".$value)/1024),2)."kb";
                      $j++;
                      echo "</td>";
                    	$i++;
                    	if($i > $cols)
                    	{
                    	echo "</tr>\n<tr>\n";
                    	$i = 1;
                    	}
                      } 
                    
                      closedir($verz);
                    Unterhalb der ### Zeile kommt die Ausgabe, die wollte ich wie folgt ändern:

                    Code:
                    //Schleife, jedes Bild wird bearbeitet.
                    //Bilder pro Seite, 4 Spalten, 6 Zeilen
                    $perpage = 24;
                    $pages = ceil($anzahl/$perpage);
                    echo $anzahl." Bilder auf ".$pages." Seiten 
                    \n";
                    
                    if(!isset($pagenum) OR ($pagenum == 0) OR empty($pagenum)):$pagenum = 1; endif;
                    echo $pagenum;
                    
                    $limitlower = ($pagenum-1) * ($perpage+1);
                    $limitupper = $limitlower + ($perpage);
                    echo " ".$limitlower." ";
                    echo $limitupper;
                    
                    var_dump($link1);
                    $pics_page = array_slice($link1, 1, 5);
                    var_dump($pics_page);
                    Also die Geschichte mit dem Bilder auf die Seiten vertielen, ist nur die Berechnung, ohne Ausgabe...

                    Kommentar


                    • #11
                      Ich weis nicht, was du da machst.

                      Ich habe in deinem Script an der Stelle wo Du gesagt hast ein var_dump() eingefügt und da steht ein Array drin.

                      PHP-Code:
                      <?php

                        
                      // Verzeichnis wird geöffnet 
                         
                      $verz=opendir("."); 
                       
                         
                      // Ein Array wird erstellt in dem nachher die Dateien gespeichert werden 
                         
                      $linkl = array (); 

                         while(
                      true == ($file readdir ($verz))) 
                         { 
                       
                       
                      //Alle Dateien in den Array einlesen 
                           
                      $jpegtrue pathinfo($file); 
                          if(
                      $jpegtrue['extension'] == "jpg"
                          { 
                           
                      //Damit "." und ".." nicht ins Array geschrieben werden, werden sie ausgenommen.     
                           
                      if($file != "." && $file != ".." && $file != $filename
                            { 
                             
                      array_push ($linkl"$file"); // Der Dateiname wird in den Array $linkl geschrieben 
                           

                           } 
                          } 
                       
                         
                      // Anzahl der Dateien im Ordner == Anzahl der Einträge im Array 
                         
                      $anzahl count($linkl); 
                       
                         
                      // Array wird nach Alphabet sortiert 
                         
                      sort ($linkl); 
                       
                       
                      #################################################################################################### 

                      var_dump($linkl);

                         foreach(
                      $linkl as $key => $value
                         { 
                       
                         
                      //Thumb schon vorhanden? Wenn nein, wird er erstellt 
                           
                      if(!file_exists($des_src."/".$value)) 
                           { 
                             
                      // erstelle ein thumb (Funktion ist weiter oben deklariert) 
                             
                      mkthumb($value$thumbx$thumby$folder_scr$des_src); 
                           } 
                         
                      //Ausgabe der Thumbs/Des Arrays: 
                         
                      echo "<td>"
                         echo 
                      "<a href=\"index.php?action=showpic&amp;folder=".$folder_scr."/&amp;pic=".$value."&amp;event=".$fileplace."\">\n"
                         echo 
                      "[img].$des_src.[/img]</a>\n"
                         echo 
                      "
                      [b]"
                      .round((filesize($folder_scr."/".$value)/1024),2)."kb[/b]"
                         
                      $j++; 
                         echo 
                      "</td>"
                          
                      $i++; 
                          if(
                      $i $cols
                          { 
                          echo 
                      "</tr>\n<tr>\n"
                          
                      $i 1
                          } 
                         } 
                       
                         
                      closedir($verz);
                      ?>
                      Gibt folgendes aus:
                      array(1) { [0]=> string(5) "a.jpg" }
                      Fatal error: Call to undefined function: mkthumb() in /mnt/data/vol/www/htdocs/bla.php on line 40

                      In dem Verzeichnis befindet sich bei mir in der Tat genau diese a.jpg. Da würde ich übrigens noch ein strtolower() einbauen, damit .JPG oder ähnliches auch erkannt wird.
                      mod = master of disaster

                      Kommentar


                      • #12
                        Hi!

                        das ist die Funktion, die den Thumb erstellt
                        Code:
                        ####################################################################################################
                        //Funktion, die die Thumbs erstellt
                          function mkthumb($img_src,     // Dateiname 
                                           $img_width,   // max. Größe in x-Richtung 
                                           $img_height,  // max. Größe in y-Richtung 
                                          $folder_scr,  // Ordner der normalen Bilder 
                                           $des_src)     // Ordner der Thumbs  
                          { 
                           if (!file_exists($des_src)) {
                        		 umask(0000);
                                 mkdir($des_src, 0777);
                                 }
                           	$image = imagecreatefromjpeg($folder_scr."/".$img_src); 
                            list($src_width, $src_height) = getimagesize($folder_scr."/".$img_src); 
                            if($src_width >= $src_height) 
                            { 
                              $new_image_width = $img_width; 
                              $new_image_height = $src_height * $img_width / $src_width; 
                            } 
                            if($src_width < $src_height) 
                            { 
                              $new_image_height = $img_width; 
                              $new_image_width = $src_width * $img_height / $src_height; 
                            } 
                            $new_image = imagecreate($new_image_width, $new_image_height); 
                            imagecopyresized($new_image, $image, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height); 
                            imagejpeg($new_image, $des_src."/".$img_src, 100); 
                          } 
                        ####################################################################################################
                        Kannst du umgehen, in dem du im Ordner einen Unterordner namens thumbs erstellst und dort nochmal die Datei a.jpg einfügst.

                        Bei mir steht da kein Array drin, kommt nur NULL... Das Grundprinzip des Scripts beruht auf dem von codeschnipsel.net bzw. dem hier im Tutorial Forum angegeben!

                        Kommentar


                        • #13
                          Zitat von santacruzshores
                          Bei mir steht da kein Array drin, kommt nur NULL...
                          Mit dem script, das ich gepostet habe?
                          Der Fatal Error war mir um ehrlich zu sein egal, da er nach der interessanten stelle kam.
                          mod = master of disaster

                          Kommentar


                          • #14
                            Ok, wenn ich das Script von dir benutze, steht im array was drin.

                            Ich kann ja mal das ganze Script, mit allem drum und dran, posten...

                            Code:
                            <?php
                            
                            ####################################################################################################
                            //Funktion, die die Thumbs erstellt
                              function mkthumb($img_src,     // Dateiname 
                                               $img_width,   // max. Größe in x-Richtung 
                                               $img_height,  // max. Größe in y-Richtung 
                                              $folder_scr,  // Ordner der normalen Bilder 
                                               $des_src)     // Ordner der Thumbs  
                              { 
                               if (!file_exists($des_src)) {
                            		 umask(0000);
                                     mkdir($des_src, 0777);
                                     }
                               	$image = imagecreatefromjpeg($folder_scr."/".$img_src); 
                                list($src_width, $src_height) = getimagesize($folder_scr."/".$img_src); 
                                if($src_width >= $src_height) 
                                { 
                                  $new_image_width = $img_width; 
                                  $new_image_height = $src_height * $img_width / $src_width; 
                                } 
                                if($src_width < $src_height) 
                                { 
                                  $new_image_height = $img_width; 
                                  $new_image_width = $src_width * $img_height / $src_height; 
                                } 
                                $new_image = imagecreate($new_image_width, $new_image_height); 
                                imagecopyresized($new_image, $image, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height); 
                                imagejpeg($new_image, $des_src."/".$img_src, 100); 
                              } 
                            ####################################################################################################
                            
                            ####################################################################################################
                            #Einstellungen
                            //Hauptverzeichnis der Bilder Galerien
                            $rootdir = "galleries";
                            //Mit event wird die Galerie, die angezeigt werden soll, übergeben
                            $fileplace = $event;
                            //Zählvariable für die Anzeige wird 1 gesetzt
                            $i = "1";
                            $j = "0";
                            //Wieviele Spalten?
                            $cols = "4";
                            ####################################################################################################
                            
                            ####################################################################################################
                            #Ordner ausgeben
                            //Wenn event nicht gesetzt ist, gibt er erstmal alle Ordner aus
                            if(!isset($event)) {
                            $dir = opendir($rootdir);
                            
                             while($file = readdir($dir)) 
                             {
                             
                              if($file != "." AND $file != "..") 
                              {
                              //Entfernt alle "_" aus dem Ordnernamen
                              $file_screen = ereg_replace("_", " ", $file);
                              echo "<a href=\"index.php?action=pictures&amp;event=".$file."\">".$file_screen."</a>
                            
                            ";
                              }
                             }
                              echo "<hr class=\"w20\" />";
                              echo "SEBFX v. 1.06";
                            
                            //Wenn event gesetzt ist  
                             } else {
                            ####################################################################################################
                            //Existiert der Ordner überhaupt? Wenn ja, dann wird er angezigt, wenn nein, Fehlermeldung (unten)
                            $dir_exists = $rootdir."/".$fileplace;
                            if(file_exists($dir_exists)) {
                            ####################################################################################################
                            #Thumbs
                            //Ansonsten gibt event den Ordner an und die Thumbs werden erstellt
                            echo "<table cellpadding=\"5\" cellspacing=\"5\" class=\"w100center\" border=\"0\">\n";
                            echo "<tr><th colspan=\"4\">\n";
                            
                            //Entfernt alle "_" aus dem Ordnernamen
                            $file_screen = ereg_replace("_", " ", $fileplace);
                            echo "<h1>".$file_screen."</h1>\n";
                            echo "</td></tr>\n";
                            
                            echo "<tr><td colspan=\"4\" class=\"left\">\n";
                            echo "Ordner: /".$fileplace."\n";
                            echo "</th></tr>\n";
                            echo "<tr><td  colspan=\"4\" class=\"left\">\n";
                            echo "<a href=\"index.php?action=pictures\">Zur&uuml;ck zur Auswahl</a>";
                            echo "</th></tr>\n";
                            echo "<tr><td colspan=\"4\" class=\"h30\">\n";
                            echo "</th></tr>\n";
                            echo "<tr>";
                            
                            ####################################################################################################
                            //Einstellungen
                            //Name des Ordners, in dem die Originale sind: 
                              $folder_scr  = $rootdir."/".$fileplace; 
                            //Name des Ordners, in den die Thumbs sollen: 
                              $des_src     = $rootdir."/".$fileplace."/thumbs"; 
                            //Max. Ausdehnung der thumb-Datei in x-Richtung 
                              $thumbx      = "150"; 
                            //Max. Ausdehnung der thumb-Datei in y-Richtung 
                              $thumby      = "150"; 
                              // Name dieser PHP-Datei 
                              $filename = $_SERVER['PHP_SELF']; 
                            ####################################################################################################
                              
                              
                              // Verzeichnis wird geöffnet 
                              $verz=opendir($folder_scr); 
                            
                              // Ein Array wird erstellt in dem nachher die Dateien gespeichert werden 
                              $linkl = array (); 
                            
                              while(true == ($file = readdir ($verz))) 
                              { 
                            
                            //Alle Dateien in den Array einlesen
                                $jpegtrue = pathinfo($file);
                            	if($jpegtrue['extension'] == "jpg") 
                            	{
                                //Damit "." und ".." nicht ins Array geschrieben werden, werden sie ausgenommen. 	
                            	 if($file != "." && $file != ".." && $file != $filename) 
                                 { 
                                  array_push ($linkl, "$file"); // Der Dateiname wird in den Array $linkl geschrieben 
                            	 } 
                                }
                               } 
                            
                              // Anzahl der Dateien im Ordner == Anzahl der Einträge im Array 
                              $anzahl =  count($linkl); 
                            
                              // Array wird nach Alphabet sortiert 
                              sort ($linkl); 
                            
                            
                            ####################################################################################################
                            /* //Schleife, jedes Bild wird bearbeitet.
                            //Bilder pro Seite, 4 Spalten, 6 Zeilen
                            $perpage = 24;
                            $pages = ceil($anzahl/$perpage);
                            echo $anzahl." Bilder auf ".$pages." Seiten 
                            \n";
                            
                            if(!isset($pagenum) OR ($pagenum == 0) OR empty($pagenum)):$pagenum = 1; endif;
                            echo $pagenum;
                            
                            $limitlower = ($pagenum-1) * ($perpage+1);
                            $limitupper = $limitlower + ($perpage);
                            echo " ".$limitlower." ";
                            echo $limitupper;
                            
                            var_dump($link1);
                            $pics_page = array_slice($link1, 1, 5); */
                            
                            var_dump($link1);
                            
                            
                            
                            
                            
                            
                            
                              foreach($linkl as $key => $value) 
                              { 
                            
                              //Thumb schon vorhanden? Wenn nein, wird er erstellt
                                if(!file_exists($des_src."/".$value)) 
                                { 
                                  // erstelle ein thumb 
                                  mkthumb($value, $thumbx, $thumby, $folder_scr, $des_src); 
                                } 
                              //Ausgabe der Thumbs/Des Arrays: 
                              echo "<td>";
                              echo "<a href=\"index.php?action=showpic&amp;folder=".$folder_scr."/&amp;pic=".$value."&amp;event=".$fileplace."\">\n";
                              echo "[img].$des_src.[/img]</a>\n";
                              echo "
                            ".round((filesize($folder_scr."/".$value)/1024),2)."kb";
                              $j++;
                              echo "</td>";
                            	$i++;
                            	if($i > $cols)
                            	{
                            	echo "</tr>\n<tr>\n";
                            	$i = 1;
                            	}
                              } 
                            
                              closedir($verz);
                            
                            
                            
                            
                            ####################################################################################################
                            //Anzahl der Fotos
                            echo "<tr><th colspan=\"4\"></th></tr>";
                            echo "<tr><th colspan=\"4\">";
                            if($j == "1")
                            {
                            $foto = "Foto";
                            } else {
                            $foto = "Fotos";
                            }
                            
                            echo "".$j." ".$foto." vorhanden</th></tr>";
                            echo "</table>";
                            ####################################################################################################
                            
                            
                            //Fotoalbum existiert nicht. Fehlermeldung.
                            } else {
                            echo "Fotolbum \"".$fileplace."\" nicht vorhanden!";
                            }
                            
                            
                            //Achtung, Klammer vom Else-Zweig!!
                            }
                            
                            
                            ?>
                            Vielleicht findet da jemand noch was... (Wie bekomme ich den Codeauszug so hin, dass es farbig und übersichtlicher wird?)

                            Kommentar


                            • #15
                              Du solltest dich vielleicht entscheiden, ob die Variable $linkl mit L oder $link1 mit 1 (eins) heisst.
                              mod = master of disaster

                              Kommentar

                              Lädt...
                              X