Unerwartetes Array-Problem [plz no n00b-re.]

Neurodeamon

Erfahrenes Mitglied
Ich habe eine Funktion geschrieben, die von einem Startverzeichnis aus alle Unterordner in ein Array schreibt (schreiben soll).

Das Verzeichnis:
.
..
images [Ordner]
thumbs [Ordner]
index.php [Datei]
ignore.php [Datei]

Der Code:

PHP:
<?
function dirlist($dirArray) {
global $dirArray;
	$vardir=opendir(".");
	while ($object = readdir($vardir))
	{
 		if(is_dir("$object") && $object != "..")
		{
			$dirArray[$i] = "$object";
			$i++;
		}
		clearstatcache ();
	}
	closedir($vardir);
return $dirArray;
					}
?>
<?
dirlist($dirArray);
for ($c=1; $c<count($dirArray); $c++)
	{
		echo $dirArray[$c] . "<br>";
	}
?>

Die Probleme kommen jetzt:
Wenn ich aus der Auflistung "." und ".." entfernen möchte.

Also im oberen PHP-Code diese Zeile ändere
PHP:
		if(is_dir("$object") && $object != "." && $object != "..")
Statt den Punkt zu entfernen entfernt verschwindet der Ordner "images" aus dem Array. Obwohl ich nur "." und ".." aus dem Array entferne (sowie alle NICHT-Ordner). Wird "images" immer Array[1] und nicht Array[0]. Das gleiche geschieht wenn ich in der While-Schleife $i explizit auf "0" setze und das ganze nicht automatisch beginnen lasse. Bei der Ausgabe kann ich den foreach-counter bei Array[1] beginnen lassen, was aber nicht das problem behebt ... sondern nur die sichtbare ausgabe.
Zum Test habe ich in die while-Schleife ein
PHP:
 echo "$object";
gesetzt und die whileschleife arbeitet wie vorgesehen alle ordner ab. Deswegen habe ich die Vermutung das mit dem Code der den Array erstellt etwas nicht stimmt. Irgendwie hab ich aber ein brett vorm kopp :) *grr*

Theoretisch ist der Code ok, praktisch klappt es nicht.
Der Code wird auf einem Apache abgearbeitet.
Wär cool wenn jemand etwas sieht, das ich anscheinend übersehe ... *grummel*.

P.S.:
Bitte keine "vielleicht-liegt-es-daran"-Antworten.
Ich weiß das es auch andere Möglichkeiten gibt das Array mit den Ordnern zu erzeugen, auch das ist momentan unwichtig. Ich möchte dieses Problem hier verstehen.

P.P.S.:
Danke im Voraus.

Gruß,
Neuro
 
wow... antworte ich mir mal selbst um die zeit totzuschlagen bis jemand helfen kann *g*

so happig dürfte der code doch gar net sein?
 
hmm tja du wolltest zwar keine solche antwort aber versuch mal anstatt
PHP:
if(is_dir("$object") && $object != "." && $object != "..")

das

PHP:
if(is_dir("$object") || $object != "." && $object != "..")

ich bin mir net ganz sicher aber theoretisch sollte deins scho gehn
na ja wenns net wirklich ne hilfe ist owohl ich mir das auch net erklären kann das deins net geht dann sorry!
 
Hier der Funktionierende Code:
Ich verstehe es immer noch nicht, aber das Problem ist hiermit gelöst (habe bloss noch "sort" verwendet). Ein PHP-Bug? Keine Ahnung, ich frage mal bei PHP.net oder im Zend-Forum an ;)

PHP:
<sarkasm>
Schön das mir mal wieder jemand geholfen hat
</sarkasm>
:rolleyes:

PHP:
<?
function dirlist($dirArray) {
global $dirArray;
	$vardir=opendir(".");
	while ($object = readdir($vardir))
	{
 		if(is_dir("$object") && $object != "." && $object != "..")
		{
			$dirArray[$i] = "$object";
			$i++;
		}
		clearstatcache ();
	}
	closedir($vardir);
sort ($dirArray);
return $dirArray;
					}
?>
<?
dirlist($dirArray);
for ($c=0; $c<count($dirArray); $c++)
	{
		echo $dirArray[$c] . "<br>";
	}
?>
 
Zuletzt bearbeitet:
Zurück