Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : zufall



localhost
07-03-2003, 20:06
srand(microtime()*1000000);
$zufall = rand(1,20);
echo $zufall


so kann die zahlen 1 bis 20 zelfig erscheinen lassen aber wie kann ich da bilder oder links usw reinmachen ??

magpie
07-03-2003, 20:18
Gib den Bildern die Namen von 1-20 und lass sie dann ausgeben.


srand(microtime()*1000000);
$zufall = rand(1,20);
$bild = $zufall.".jpg";
echo "<img src\"$bild\">";

Gaert
07-03-2003, 20:46
Hallo!

Andere Möglichkeit:
Du nimmst ein numerisch indiziertes Array, und gibst dem Werte (nicht vergessen dass der index bei 0 beginnt).


<?php
$bilder[]="bild1.jpeg";
$bilder[]="bild2.jpeg";
$bilder[]="bild3.jpeg";
$bilder[]="bild4.jpeg";

srand(microtime()*1000000);
$zufall = rand(0,3);
echo $bilder[$zufall];
?>

localhost
08-03-2003, 01:04
:) danke

localhost
08-03-2003, 17:12
<?php
$bilder[]="bild1.jpeg";
$bilder[]="bild2.jpeg";
$bilder[]="bild3.jpeg";
$bilder[]="bild4.jpeg";
$bilder[]="bild5.jpeg";
$bilder[]="bild6.jpeg";
$bilder[]="bild7.jpeg";
$bilder[]="bild8.jpeg";
$bilder[]="bild9.jpeg";
$bilder[]="bild0.jpeg";

srand(microtime()*1000000);
$zufall = rand(0,3);
echo $bilder[$zufall];
?>

sagen wie mal cih hätte 10 bilder und will die alle 10 anzeigen lassen auf plätzen aber es soll bei seiten aufbau immer eine ander reihenfolle geben.
Also das bild 1 mal auf platz 4;5;6;7..,, ist usw bild zwei und so weiter

Gaert
08-03-2003, 17:43
Hallo localhost!

Erstmal:
Kleiner Fehler in deinem Skript - kommt davon wenn man einfach Copy und Paste macht!
Du hast geschrieben:
$zufall = rand(0,3);

=> er liefert dir eine Zufallszahl zwischen 0 und 3 => es können immer nur die ersten vier Bilder in deinem Array angezeigt werden.

Richtig ist:
$zufall = rand(0,count($bilder)-1);

In deinem Fall ist es notwendig, das ganze Array durchzumischen. Das machst du mit der Funktion shuffle().

Also:



<?php
$bilder[]="bild1.jpeg";
$bilder[]="bild2.jpeg";
$bilder[]="bild3.jpeg";
$bilder[]="bild4.jpeg";
$bilder[]="bild5.jpeg";
$bilder[]="bild6.jpeg";
$bilder[]="bild7.jpeg";
$bilder[]="bild8.jpeg";
$bilder[]="bild9.jpeg";
$bilder[]="bild0.jpeg";

shuffle($bilder);

foreach($bilder as $bild) {
echo "<img src=\"$bild\" /><br/>\n";
}
?>

localhost
08-03-2003, 19:34
<?
$bilder[]="http://192.168.1.101?m=1";
$bilder[]="http://192.168.1.101?m=2";
$bilder[]="http://192.168.1.101?m=3";
$bilder[]="http://192.168.1.101?m=4";
$bilder[]="http://192.168.1.101?m=5";
$bilder[]="http://192.168.1.101?m=6";
$bilder[]="http://192.168.1.101?m=7";
$bilder[]="http://192.168.1.101?m=8";
$bilder[]="http://192.168.1.101?m=9";
$bilder[]="http://192.168.1.101?m=0";

shuffle($bilder);
$zufall = rand(0,count($bilder)-1);

foreach($bilder as $bild) {
echo "<a href=\"$bilder[$zufall]\" target=_blank>$bilder[$zufall]</a> ";
}
?>

jetzt kommt aber 10 mal der kleiche link hintereinander.
Ich meine


<table><tr>
<td>$Bild X</td>
<td>$Bild X</td>
</tr><tr>
<td>$Bild X</td>
<td>$Bild X</td>
</tr><tr>
<td>$Bild X</td>
<td>$Bild X</td>
</tr><tr>
<td>$Bild X</td>
<td>$Bild X</td>
</tr><tr>
<td>$Bild X</td>
<td>$Bild X</td>
</tr></table>

und in den felder sollen die bilder kommen aber immer unterschidlich also wo welches ist

Gaert
08-03-2003, 20:59
Hallo localhost!

Ich habe oben in der Beschreibung nur eine Fehlerkorrektur für dein Beispiel geliefert!
Was ich dann als PHP Code geschrieben habe hatte mit dem nichts mehr zu tun!

Das da 10 mal das gleiche Bild kommt ist doch logisch... wie wärs, wenn du erstmal versuchst das was du programmierst zu verstehen!

Bitte lies den PHP Code den ich oben gepostet habe nochmal genau durch... es funktioniert genauso wie ich es geschrieben habe!

localhost
08-03-2003, 21:15
ja es geht ja aber das ist nicht genau so das was ich brauche.
Ich brauche eindcih nur die anordung ander aber.
Also 10 bilder und die kommen auch aber immer ander.

Gaert
09-03-2003, 00:49
Bist du sicher, dass du genau das, was ich gepostet habe ausprobiert hast?

localhost
09-03-2003, 03:38
<?php
$bilder[]="bild1.jpeg";
$bilder[]="bild2.jpeg";
$bilder[]="bild3.jpeg";
$bilder[]="bild4.jpeg";
$bilder[]="bild5.jpeg";
$bilder[]="bild6.jpeg";
$bilder[]="bild7.jpeg";
$bilder[]="bild8.jpeg";
$bilder[]="bild9.jpeg";
$bilder[]="bild0.jpeg";

shuffle($bilder);

foreach($bilder as $bild) {
echo "<img src=\"$bild\" /><br/>\n";
}
?>


ja doch das scheind es zu sein.
Aber da habe ich eine ausgabe und wie kann cih das von 10 stellen aus machen also :


<table><tr>
<td>$Bild X</td>
<td>$Bild X</td>
</tr><tr>
<td>$Bild X</td>
<td>$Bild X</td>
</tr><tr>
<td>$Bild X</td>
<td>$Bild X</td>
</tr><tr>
<td>$Bild X</td>
<td>$Bild X</td>
</tr><tr>
<td>$Bild X</td>
<td>$Bild X</td>
</tr></table>


so das dan in jedem feld ein bild kommt.

msi
09-03-2003, 11:25
.....

echo "<table>";

$i=0;
$intr = 0;

foreach(.... {
$i++;
if ( $i > 2) {
$i=0;
echo "</tr>";
$intr =0;
}
if (! $intr) echo "<tr>";
echo "<td> !!BILD!! </td>;"
}

if ($intr) echo "</tr>";

echo "</table>\n";


das ist wohl das was du willst, !!BILD!! und ... (am Anfang) musst du noch entsprechend ersetzen.

Markus

localhost
09-03-2003, 11:54
<?php
$bilder[]="bild1.jpeg";
$bilder[]="bild2.jpeg";
$bilder[]="bild3.jpeg";
$bilder[]="bild4.jpeg";
$bilder[]="bild5.jpeg";
$bilder[]="bild6.jpeg";
$bilder[]="bild7.jpeg";
$bilder[]="bild8.jpeg";
$bilder[]="bild9.jpeg";
$bilder[]="bild0.jpeg";

shuffle($bilder);


echo "<table>";
$i=0;
$intr = 0;
foreach($bilder as $bild)
{
$i++;
if ( $i > 2)
{
$i=0;
echo "</tr>";
$intr =0;
}
if (! $intr) echo "<tr>";
echo "<td> $bild </td>";
echo "<td> $bild </td>";
echo "<td> $bild </td>";
echo "<td> $bild </td>";
echo "<td> $bild </td>";
echo "<td> $bild </td>";
echo "<td> $bild </td>";
}
if ($intr)
echo "</tr>";
echo "</table>";

?>

soweit sogut

aber jetzt kommt ei jeden $bild alle 10 also 100 bilder kommen aber wie schafe ich das nur eins bei $bild kommt eins pro $bild

msi
09-03-2003, 12:21
indem du
echo "<td> $bild </td>";
nur einmal hinschreibst und nicht gleich 7mal!

localhost
09-03-2003, 12:23
Ja ok dan kommten die 10 bilder aber in einer <td>$Bild X</td>
aber die sollen ja in 10 verschidenen <td>$Bild X</td>
kommen

also in jeweils ein <td></TD> soll ein bild rein und das 10 mal und bei jeden auf in einer ander reihenvollge

Gaert
09-03-2003, 12:44
Hallo!

Soo... um alle unklarheiten zu beseitigen und jetzt mal klarheit zu schaffen:
Hier die Lösung für dein Problem!
@localhost:
Ich habe es so gut dokumentiert wie ich konnte... ich hoffe jetzt verstehst auch du das!
@msi:
Schau dir mal die Modulo Geschichte an! Eignet sich für solche Sachen besser.



<?php
//Wir füllen das Array $bilder mit Werten
$bilder[]="bild1.jpeg";
$bilder[]="bild2.jpeg";
$bilder[]="bild3.jpeg";
$bilder[]="bild4.jpeg";
$bilder[]="bild5.jpeg";
$bilder[]="bild6.jpeg";
$bilder[]="bild7.jpeg";
$bilder[]="bild8.jpeg";
$bilder[]="bild9.jpeg";
$bilder[]="bild0.jpeg";

//Jetzt mischen wir das Array zufällig durch
shuffle($bilder);

//Jetzt bauen wir uns die Ausgabe zusammen.
//<table> muss ausserhalb der schleife stehen... nur das was
//sich wiederholt kommt innenrein
echo "<table>\n";

//Wir öffnen das erste <tr>
echo "<tr>\n";


//Nun legen wir fest wieviele Bilder wir pro Zeile anzeigen wollen:
$bpz=2;

//Ich verwende einen etwas weniger umständlichen Ansatz um
//herauszufinden, ob wir ein <tr> ausgeben müssen!

//Jetzt wird das $bilder array genommen und für jeden eintrag im
//Array wird ein Schleifendurchlauf erzeucht (for each halt!).
//Dabei ist $i der Schlüssel des aktuellen Array eintrags und
//$bild der Wert!
foreach($bilder as $i=>$bild) {

//Wir verwenden Modulo, um zu prüfen ob wir <tr> ausgeben müssen!
//Die Modulo Operation ergibt den Rest einer Division...
//Wenn also der Index des Arrays ohne Rest durch $bpz
//Teilbar ist müssen wir eine neue Tabellenzeile ausgeben.
//Wir müssen die Ausgabe aber verhindern, falls der Index 0 ist, da dieser
//immer den Rest 0 hat
if (!($i % $bpz) && ($i>0)) {
echo "</tr>\n";
echo "<tr>\n";
}
echo "<td>$bild</td>\n";

//Jetzt zählen wir hoch!
$i++;
}

//Nun fügen wir noch Dummy <td>´s ein, falls wir nicht genug Bilder für die letzte
//Zeile mehr haben (ansonste zerreist es uns ja die Tabelle)!
while ($i % $bpz) {
echo "<td>&nbsp;</td>\n";
$i++;
}

//Wir schließen das letzte <tr> und die Tabelle
echo "</tr>\n";
echo "</table>\n";
?>

Gaert
09-03-2003, 12:51
Ich sehe grad ihr habt schon wieder weitergepostet...
Localhost, bitte auch wenns sauschwer fällt,
poste mal so, dass wir auch verstehen, was du eigentlich willst!

localhost
09-03-2003, 12:57
ok von zeit zur zeit brauch ich eine anstubs in sachen rechtschreibung usw ich bemühe mich ncoh mal daruf zu achten

msi
09-03-2003, 14:47
Original geschrieben von Gaert
@msi:
Schau dir mal die Modulo Geschichte an! Eignet sich für solche Sachen besser.
[/B]

an modulo hatte ich wirklich nicht gedacht, aber du hast Recht, dein Stil ist wesentlich eleganter.

Markus

jwebworks
13-03-2003, 08:53
Original geschrieben von localhost
ok von zeit zur zeit brauch ich eine anstubs in sachen rechtschreibung usw ich bemühe mich ncoh mal daruf zu achten
Hmm, ich würde weniger sagen, in Sachen Rechtschreibung.
Besser wäre es, wenn Du Dein Problem ausführlicher und
klarer Beschreiben würdest. Einen Schritt nach dem anderen
aufführst.

Beim Anschauen der Beispiel-Codes der Leute, die Dir helfen
wollen, solltest Du den Quellcode genau ansehen und Dir
klar machen:
Was will mir der Kerl da genau sagen?
Warum hat der jetzt das mit dem Zufall weggelassen und nur "shuffle" geschrieben?
Was macht "shuffle" überhaupt?

Schaue auf www.php.net in der Documentation, die
übrigend sehr gut ist, nach und LESE, was der Befehl
macht.

Man kann übrigens sehr leicht zu der Dokumentation kommen,
in dem man an das http://www.php.net/ einfach den namen
der Funktion anhängt. Also: http://www.php.net/shuffle
Da stehen dann auch noch ein paar weitere hilfreiche Infos, die
von anderen Benutzern eingefügt wurden.

Es sei denn Du möchtest, dass die Arbeit von den Leuten hier
im Forum gemacht wird und Du nur das fertige Skript, nach Deinen
Wünschen programmiert bekommst :-)

Wichtig ist: Lesen! Nicht einfach kopieren und einfügen. Sondern
lernen, anpassen und einfügen. Dann wirst Du schnell Fragen nicht
mehr stellen müssen, sondern weisst, wie Du sehr einfach an die
Lösung Deiner Probleme kommst.

cu, stop.h

Gaert
13-03-2003, 09:05
Schön gesagt!