[PHP]While lussen doen vaag..

Pagina: 1
Acties:

  • FireFoz
  • Registratie: Juni 2001
  • Laatst online: 31-08 23:38
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$getal=5000;

while($img1 == (NULL))
{
    mt_srand((double)microtime()*$getal);
    $img1=rand(1,226);
}

while($img2 == $img1)
{
    mt_srand((double)microtime()*$getal);
    $img2=rand(1,226);
}

while($img3 == $img1 OR $img3 == $img2)
{
    mt_srand((double)microtime()*$getal);
    $img3=rand(1,226);
}

im gebruik die code dus om 3 verschillende getallen te genereren...er mogen absoluut geen dubbelle tussen zitten, dus ik doe het ff zo.

Het rare is nou, dat de 2e nooit werkt! Ook al maak ik van de 2e bijv.
code:
1
$img2 = 123;

dan doet gewoon de 2e lus (img3 dus) het niet
:?

ik kan ook niks fouts ontdekken aan img1...
het loopt btw door tot img10..

heeft iemand een id?

Leef lekker in het nu, er is niks anders


  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

$img1 is nooit $img2 ? want eerst doet ie $img1 en die whileloop gebeurt als $img1 nul is. Dan wordt ie een waarde, maar vast nooit dezelfde als $img2 op dat moment

Sundown Circus


Verwijderd

while($img2 == $img1 || $img2 == NULL)

?

Verwijderd

Een while loop checkt aan het begin of iets geldt. Als dat niet zo is, wordt de loop niet doorlopen.

Jij hebt een do...while loopje nodig:
PHP:
1
<?do {  mt_srand((double)microtime()*$getal);  $img2=rand(1,226);} while($img2 == $img1);?>

Deze wordt altijd eerst een keer doorlopen, en erna wordt gecheckt of het nog een keer moet.

  • FireFoz
  • Registratie: Juni 2001
  • Laatst online: 31-08 23:38
ahhhhhhh tuurlijk!

$img is nog niks!!!
doh...begin te merken dat het al laat wordt :P

tnx m8

Leef lekker in het nu, er is niks anders


Verwijderd

Op maandag 11 maart 2002 01:17 schreef FireFoz het volgende:
ahhhhhhh tuurlijk!

$img is nog niks!!!
doh...begin te merken dat het al laat wordt :P

tnx m8
Voor de duidelijkheid, dat geldt natuurlijk voor alle 3 de loops :)

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Je moet maar 1 keer een mt_srand gebruiken

En vervang rand door mt_rand :)

Programmer - an organism that turns coffee into software.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:13
Alle echt zinnige informatie is al gezegd, maar ik vind die zinloze loopjes toch nog een beetje jammer. De beste manier om die te voorkomen en toch een uniforme verdeling te behouden lijkt me de volgende:
PHP:
1
<?mt_srand((double)microtime()*$getal);$img1=mt_rand(1,226);$img2=mt_rand(1,225);$img3=mt_rand(1,224);if($img2>=$img1) ++$img2;if($img3>=$img1) ++$img3;if($img3>=$img2) ++$img3;?>

Maar dit is ook nog niet erg netjes, want dit is slecht uit te breiden naar meer variabelen. Je zou natuurlijk kunnen overwegen een array met mogelijke waardes aan te maken ([1..226]) en daar elke keer een random element uit te pakken, maar dat schaalt weer slecht naar 'n groot bereik. Iemand betere suggesties?

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op maandag 11 maart 2002 02:09 schreef Soultaker het volgende:
Alle echt zinnige informatie is al gezegd, maar ik vind die zinloze loopjes toch nog een beetje jammer. De beste manier om die te voorkomen en toch een uniforme verdeling te behouden lijkt me de volgende:
PHP:
1
<?mt_srand((double)microtime()*$getal);$img1=mt_rand(1,226);$img2=mt_rand(1,225);$img3=mt_rand(1,224);if($img2>=$img1) ++$img2;if($img3>=$img1) ++$img3;if($img3>=$img2) ++$img3;?>

Maar dit is ook nog niet erg netjes, want dit is slecht uit te breiden naar meer variabelen. Je zou natuurlijk kunnen overwegen een array met mogelijke waardes aan te maken ([1..226]) en daar elke keer een random element uit te pakken, maar dat schaalt weer slecht naar 'n groot bereik. Iemand betere suggesties?
Leuk script alleen werkt hij niet.....

stel nu eens voor er komt de volgende random waardes uit.

$img1=12;
$img2=11;
$img3=11;

Onwaarschijnlijk maar echt wel mogelijk.... Daarnaast wil hij graag 10 waardes hebben.
Persoonlijk zou ik een array gebruiken.

Misschien zoiets :?
PHP:
1
<?error_reporting(E_ALL);$getal=10000;$randmax=226;$noEntries=10;$img=array();mt_srand((double)microtime()*$getal);$random=mt_rand(1,$randmax);$randomAdd=mt_rand(1,225);echo $random,":",$randomAdd;for($i=0;$i<$noEntries;$i++){    $random+=$randomAdd;    if ($random > $randmax)            $random-=$randmax;    $nwRandom=$random;    do    {        if ($nwRandom > $randmax)            $nwRandom-=$randmax;        $nwRandom++;    }    while(in_array($nwRandom,$img));    $img[]=$nwRandom;}?>

Programmer - an organism that turns coffee into software.


  • Grum
  • Registratie: Juni 2001
  • Niet online
dit kan ZO simpel he >:)
PHP:
1
<?srand ((float) microtime() * 10000000); $theMin     = 0;$theMax     = 255;$theNum     = 3; $theNumbers = array_rand( range( $theMin, $theMax ), $theNum );?>

wat is php toch geweldig :)

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op maandag 11 maart 2002 10:43 schreef Grum het volgende:
dit kan ZO simpel he >:)
PHP:
1
<?srand ((float) microtime() * 10000000); $theMin     = 0;$theMax     = 255;$theNum     = 3; $theNumbers = array_rand( range( $theMin, $theMax ), $theNum );?>

wat is php toch geweldig :)
Bah... :)

Dit is gewoon niet leuk meer hoe simpel....

to TopicStarter: RTFM >:)

Programmer - an organism that turns coffee into software.


Verwijderd

Inderdaad simpel, maar LuCarD, laat je nu niet verleiden tot teksten als 'RTFM', nergens voor nodig toch? *D

to topicstarter: RTM >:)

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op maandag 11 maart 2002 11:03 schreef DiStance het volgende:
Inderdaad simpel, maar LuCarD, laat je nu niet verleiden tot teksten als 'RTFM', nergens voor nodig toch? *D

to topicstarter: RTM >:)
Hoezo het is toch een "Fine" Manual :?

>:)

Programmer - an organism that turns coffee into software.


Verwijderd

Ow? ik dacht Read The Fantastic Manual :?
have to admit, I see a point been made here :P

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

</offtopic> ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Grum
  • Registratie: Juni 2001
  • Niet online
nu maar hopen dat onze FireFoz ook even de 'liefste' oplossing meepikt :)

Btw zo'n oplossing is echt niet simpel uit de manual te halen. Dit is gewoon iets wat ik altijd probeer - het zo kort mogelijk houden van code.

Zo kan je bv ook het verschil tussen 2 microtime's uitrekenen op 1 regel >:)
Ik bedoel dus met maar 1 ; op de hele regel (aan het einde :P).

Het is gewoon een beetje knutselen met PHP :+
code:
1
2
3
4
$theStartTime  = microtime();
$theEndTime    = microtime();
 
$theWastedTime = join('',array_reverse(explode(' ',substr($theEndTime ,1)))) - join('',array_reverse(explode(' ',substr($theStartTime,1))));
Pagina: 1