• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> Klick

[PHP] Array und verschluckte Werte ...

kalle007

Jamba
Registriert
07.09.09
Beiträge
56
Hallo Apfeltalk-User,

ich habe mal wieder ein Problem.
Ich lasse mir ein Verzeichnis einlesen und alle Bildernamen in ein Array speichern.
Danach lasse ich das Array sortieren und geben das ganze aus ... jedoch wird immer die letzte Datei (im Verzeichnis) nicht mit eingelesen ... und dementsprechend auch nicht ausgegeben ...

Jetzt die Frage, Wo liegt das Problem, warum ließt er immer die letzte Datei nicht mit ein?

Code:
<?php
$fileAr = array();
$event="Gewitter und Blitze";
if ($dir = @dir("events/$event/"))
{
    while(FALSE !== ($file = $dir->read()))
    {

            if ($file == '.' || $file == '..')
                continue;
            else {
            	if( strstr($file, ".jpg")) {
                $file = ereg_replace ( ".jpg", "" , $file );
                $fileAr[$file] = $file; }}

    }
    $dir->close();
}
else
    die('Verzeichnis existiert nicht!');

sort($fileAr);
foreach($fileAr AS $name => $value)
			{
        		if( $name > 0){
        		$c++;
        		echo "<img src='events/$event/$name.jpg' width='250' border='0'>&nbsp;&nbsp;&nbsp;&nbsp;";

						if($c==3){
						$c=0;
						echo "<br/><br/>";
						}}}
?>

Vielen Dank im Vorraus.

mfg
kalle
 

DerKleineBruder

Jonagold
Registriert
02.11.09
Beiträge
20
Hi kalle,

die Array sind 0-indiziert. Mach mal aus dem
if( $name > 0) ein if( $name >= 0)
dann sollte es klappen.
 

_linx_

Kleiner Weinapfel
Registriert
04.01.09
Beiträge
1.125
Sehe ich das richtig, das das $name einen String darstellt? Dann ist eine Abfrage sowieso nicht nötig. Und da du in der foreach sowieso nur Elemente hast, die auch wirklich im Array sind, ist diese if total unnötig.

Ausserdem ist dein Einrückungsstil recht ungewöhnlich... Ich empfehle dir als Lektüre einmal die PEAR Coding Standards (http://pear.php.net/manual/de/standards.php)
 

kalle007

Jamba
Registriert
07.09.09
Beiträge
56
Das Problem ist, das meine Bilder im Verzeichnis nach folgendem Schema aufgebaut sind 1.jpg, 2.jpg usw. wenn ich das if ($name > 0) rausnehme, will er mir immer das Bild 0.jpg (was ja nicht existiert) anzeigen ... deshalb dieser Schritt.

Aber selbst wenn ich die if-Abfrage entferne werden nicht alle Bilder angezeigt ...

@_linx_
Ich persönlich Rücke nicht ein, hab das hier nur für die Leser gemacht, da ich mir einer besser Lesbarkeit erhofft habe.
Dadurch das ich einen PHP Editor benutze der mit alle Sachen farbig anzeigt, halte ich das einrücken für sinnlos.
 

kalle007

Jamba
Registriert
07.09.09
Beiträge
56
Fehler gefunden, ich sollte Nachts nicht mehr Programmieren oder mehr Club Mate trinken ^^

Code:
<?php
$fileAr = array();
$event="Gewitter und Blitze";
if ($dir = @dir("events/$event/"))
{
    while(FALSE !== ($file = $dir->read()))
    {

            if ($file == '.' || $file == '..')
                continue;
            else {
            	if( strstr($file, ".jpg")) {
                $file = ereg_replace ( ".jpg", "" , $file );
                $fileAr[$file] = $file; }}

    }
    $dir->close();
}
else
    die('Verzeichnis existiert nicht!');

sort($fileAr);
foreach($fileAr AS $name => $value)
			{
        		$c++;
        		echo "<img src='events/$event/$value.jpg' width='250' border='0'>&nbsp;&nbsp;&nbsp;&nbsp;";
						if($c==3){
						$c=0;
						echo "<br/><br/>";
						}}
?>

Fehler lag daran, das ich in der foreach schleife anstatt der Variablen $value die Variable $name benutzt habe, was ja total sinnlos ist ...
 

_linx_

Kleiner Weinapfel
Registriert
04.01.09
Beiträge
1.125
@_linx_
Ich persönlich Rücke nicht ein, hab das hier nur für die Leser gemacht, da ich mir einer besser Lesbarkeit erhofft habe.
Dadurch das ich einen PHP Editor benutze der mit alle Sachen farbig anzeigt, halte ich das einrücken für sinnlos.

Was heisst "Ich rücke nicht ein"? Schreibst du alles am Stück oder lässt du das das Programm übernehmen?

Im Prinzip ist es mir ja egal, wie du deinen Code schreibst, aber denke einmal daran, dass du vielleicht ein Projekt weitergeben willst oder ein Produkt verkaufen willst. Wenn du da die ganze Zeit "eigene Standards" bzw. Chaos als Standard festlegst, wirst du keinen Erfolg haben. Gut strukturierter Code ist eine wichtige Grundlage auch bei Fehlersuche!