Hallo einsiedler,
Ich sollte lieber in`s Bett gehen...
Hoffe, du hast gut geschlafen :)
$verzeichnis_datei [$i] = $verzeichnis . $datei;
$verzeichnis_datei [$i] [0] = getImageSize($verzeichnis_datei [$i]);
Das kann prinzipiell nicht funktionieren. Die erste Zeile weist dem Array an $i-ter Stelle einen String zu, der den vollständigen Dateinamen beschreibt. Die zweite Zeile würde nun versuchen, diesem String an Position 0 die Bildgröße zuzuweisen. Ich weiß gar nicht, ob Strings auf diese Weise indexierbar sind - jedenfalls ist das nicht das, was Du brauchst. Du kannst einem String keine zusätzlichen Eigenschaften anhängen.
Was du brauchst, ist ein gemeinsamer Container für alle Eigenschaften der Datei, also Name, getImageSize-Ergebnis, und diese weitere Info von der Du sprachst. Den kannst Du auf 3 Arten umsetzen:
- Du schreibst ein eigenes Objekt
- Du verwendet ein Array mit numerischen Indizes
- Du verwendest ein assoziatives Array
Mit einem assoziativen Array sähe es so aus:
while ($datei = readDir($handle)) {
if ($datei != "." && $datei != ".." && !is_dir($datei)) {
if (strstr($datei, ".gif") || strstr($datei, ".png") || strstr($datei, ".jpg")) {
$entry = [
'name' => $verzeichnis . $datei,
'groesse' => getImageSize($verzeichnis_datei [$i]),
'dings' => 'bums'
];
echo "<img src=\"{$entry['name']}\" width=\"{$entry['groesse'][0]}\" height=\"{$entry['groesse'][1]}\"> <br>\n";
$verzeichnis[] = $entry;
}
}
}
Zu beachten dabei:
-
$hugo = [ 1, 2, 3 ]
erzeugt ein Array mit numerischen Indizes. -
$otto = [ 'a'=>1, 'b'=>2, 'c'=>3 ]
erzeugt ein Array ohne numerische Indizes, die Werte werden namentlich über $otto['a'], $otto['b'], $otto['c'] angesprochen. Das ist ein assoziatives Array. -
'dings' => 'bums'
steht für diese weiteren Werte, von denen du sprachst… -
Assoziative Arrays und indizierte Arrays kann man beliebig ineinander schachteln, deswegen greift
$entry['groesse'][2]
im aktuell gebauten Eintrag auf den Schlüssel 'groesse' zu und darin auf den 3. Wert, den getImageSize geliefert hat. -
Man kann Werte automatisch ans Ende eines Arrays anhängen, indem man $verzeichnis[] = $entry schreibt. Deswegen habe ich den neuen Eintrag erstmal in $entry erzeugt, diesen Wert dann für den echo verwendet und ihn zum Schluss ins Ergebnisarray gehängt. Ist kompakter.
-
Bemerkung am Rande: Ein Array kann numerische UND alphabetische Indexe gleichzeitig haben. count($array) zählt meines Wissens beide Arten von Einträgen.
-
Will man auf ein solches Array per String Parsing zugreifen (also "Hallo $welt" und ähnliches), funktioniert die einfache Syntax nicht mehr, man braucht die "komplexe Syntax", wie das PHP Handbuch es nennt. Meint: Ein solcher Array-Zugriff muss in geschweifte Klammern gesetzt werden, sonst weiß PHP nicht, wo die Welt beginnt und endet.
Rolf
sumpsi - posui - clusi