Randombild-Script

Bäm. Noch einer der nie ein Tutorial oder ähnliches gemacht hat und sich fragt warum es nicht geht. :p
Bitte nachher mal machen: http://tut.php-q.net/

$a ist nach glob ein Array.
Das heißt du kannst es nicht als String behandeln:
PHP:
echo("<img src=\"$a\"/>");

Ein Array ist quasi eine "Liste" von variablen, die man durchlaufen muss:
PHP:
$a = array(
  "foo",
  "bar",
  "hello",
  "world"
)

// Durchlaufen
foreach ($a as $s)
{
  echo $s;
}

// Direkt ansprechen
echo $a[0];

Ausgabe:
Code:
foo
bar
hello
world

foo

Nur echo $a geht hier nicht. Das wäre als würde dich einer nach der Bundesliga fragen ohne dir zu sagen welchen Platz er wissen will.
 
Tutorials hab ich genug gemacht, sogar einige Kurse in PHP aber aus Berufstechnischengründen kurz nach der Registrierung hier nix mehr gemacht.

Hab also alles wieder vergessen.

Ich werd aus dem glob ned schlau, wenn ichs mit foreach durchlaufen lasse, krieg ich diese Warnung:

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\nom2\media\test.php on line 5

Zeile 5 ist die foreach Schleife

PHP:
<?php

$a = glob("*.jpg");
$a = array_rand($a,1);
foreach ($a as $s){
echo("<img src=\"".$a[$s]."\"/>");
}
?>
 
Hi,

Hab also alles wieder vergessen.

das hindert Dich aber nicht daran, hier gegebene Tipps zu befolgen?

Du solltest schon erstmal im Handbuch nachlesen, bevor Du Funktionen verwendest, die Dir nicht bekannt sind...

[phpf]array_rand[/phpf]
Zitat:
Return Values

If you are picking only one entry, array_rand() returns the key for a random entry.

Es sind auch Beispiele aufgeführt, wie man das benutzen kann...

Jetzt schau Dir doch mal im Manual die Beispiele an...

LG
 
das hindert Dich aber nicht daran, hier gegebene Tipps zu befolgen?

Hab nicht gesagt das ich die nicht befolge, ich habe lediglich meine Interpretation ausgearbeitet und da die nicht funktioniert hat, nochmals gepostet und nachgefragt.

Ich hab mir auch die Beispiele angeschaut zu den beiden Funktionen die du gepostet hast und da wurdebei einigen (wenigen) auch readdir und opendir verwendet bei glob.

Da ich wohl zu unerfahren/eingerostet bin um das hinzubiegen, werd ich wohl auf die alte version zurückgreifen bis auf weiteres.

Danke für die Hilfe und eure Zeit.
 
Nun ja, wenn ich mich an meine Anfangszeit erinner, hat mir auch php.net teilweise nicht geholfen, da ich einfach nicht wusste was ich brauche.

Das zum Beispiel sieht ja gar nicht so schlecht aus.
PHP:
$a = glob("*.jpg");
$a = array_rand($a,1);
foreach ($a as $s){
echo("<img src=\"".$a[$s]."\"/>");
}

Das Problem ist nur, array_rand gibt nicht immer ein Array zurück.
If you are picking only one entry, array_rand() returns the key for a random entry. Otherwise, it returns an array of keys for the random entries.
Sprich wenn man - wie bei dir - als zweites Argument eine Eins übergibt, wird lediglich ein beliebiger Index-Wert zurück gegeben. Nur wenn mehr als ein Key verlangt wird, bekommt man ein Array zurück.

Somit sollte man das z. B. so umschreiben:
PHP:
$k = array_rand( $a );// die "1" muss nicht übergeben werden, da das der Standardwert ist

$k enthält nun also einen Key - kein Array.
Mit diesem kann man nun gezielt einen Eintrag eines Arrays ansprechen, eine Schleife wird dabei nicht benötigt.

Das heisst diese 3 Zeilen:
PHP:
foreach ($a as $s){
echo("<img src=\"".$a[$s]."\"/>");
}
kannst du mit dieser einen ersetzen:
PHP:
echo("<img src=\"".$a[$k]."\"/>");

Fertig!


Man muss nur immer genau darauf achten, was die einzelnen Funktionen als Parameter erwarten und wann sie was zurück geben.
Ich denke das sollte das Verständnis an sich vereinfachen. :)
 
Hi,

Ich hab mir auch die Beispiele angeschaut zu den beiden Funktionen die du gepostet hast und da wurdebei einigen (wenigen) auch readdir und opendir verwendet bei glob.

ich habe Dir nur die Manualseite zu array_rand() gepostet. Dort ist in dem Beispiel von opendir und readdir nirgends die Rede. Auch in dem Beispiel zu glob() nicht. Macht ja auch überhaupt keinen Sinn. :confused:

Ich habe das Gefühl, dass Du weder die Beiträge hier, noch die Manualseiten richtig liest. Schau Dir das Beispiel im Manual zu array_rand() an und Du wirst sehen, wo der Fehler liegt.

LG
 
@Deluxe
Danke für die ausführliche Erklärung, werds mir nochmals zu Gemüte führen.

@kuddeldaddeldu

Ich dachte du meinst die von den Usern geposteten Beispiele.
 
Hi,

@kuddeldaddeldu

Ich dachte du meinst die von den Usern geposteten Beispiele.

nee, zu jeder Funktion ist ein, oft mehrere Beispiele angegeben, an denen Du sehen kannst, wie die Funktion verwendet wird. Die User Contributed Notes werden interessant, wenn z.B. eine Funktion aufgrund der Serverkonfiguration, Bugs oder was auch immer nicht wie erwartet arbeitet.

LG
 
Zurück