random
Als ik een getal tussen 0 en 100 heb (bijv. 35)
Hoe kan ik er dan voor zorgen dat een bepaalde code dan met 35% kans wordt uitgevoerd. Ik heb er nu al een hele tijd naar zitten zoeken maar ik kan het echt niet vinden.
BVD
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
SanThe hartelijk bedankt.
mt_rand gaan.
Als je het echt random wilt maken, zou ik voor De 'random' getallen die PHP genereerd zijn niet 100% random ;)
Lijkt mij random genoeg in ieder geval.
De vraag is nu of de TS dit ook vind?
Tommy schreef op 10.01.2009 18:55:
De 'random' getallen die PHP genereerd zijn niet 100% random ;)
Waarom niet?
yorick17 schreef op 10.01.2009 19:23:
Waarom niet?
Tommy schreef op 10.01.2009 18:55:
De 'random' getallen die PHP genereerd zijn niet 100% random ;)
Waarom niet?
Idk, er staat ook bij mt_rand() generated a better random integer. Het is gewoon zo, ik weet zelfs niet eens of alle integers door een electronisch systeem gegenereerd wel echt random zijn.
Het verschil tussen rand en mt_rand is dat mt 4 keer sneller is, maar dat heeft niets met de getallen te maken die worden gegenereerd. Ze komen allebij van de processor
Een random generator is altijd via een vast algoritme getallen aan het "verzinnen". Seeden is daarom belangrijk.
Danny schreef op 10.01.2009 19:47:
Een random generator is altijd via een vast algoritme getallen aan het "verzinnen". Seeden is daarom belangrijk.
Wat zeg je nu allemaal? Wil je beweren dat de nummers al voor gedefiniereerd zijn?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
session_start();
$_SESSION['pot'] = isset($_SESSION['pot']) ? $_SESSION['pot'] + 1 : 1;
$_SESSION['ran'] = isset($_SESSION['ran']) ? $_SESSION['ran'] : 0;
$_SESSION['ran1'] = isset($_SESSION['ran1']) ? $_SESSION['ran1'] : 0;
if(rand(1, 100) <= 35)
{
$_SESSION['ran'] = $_SESSION['ran'] + 1;
}
echo '<br/>Score ' . $_SESSION['ran'] . ' van de ' . $_SESSION['pot'] . ' en dat is ' . round($_SESSION['ran'] / $_SESSION['pot'] * 100) . '%';
if(mt_rand(1, 100) <= 35)
{
$_SESSION['ran1'] = $_SESSION['ran1'] + 1;
}
echo '<br/>Score ' . $_SESSION['ran1'] . ' van de ' . $_SESSION['pot'] . ' en dat is ' . round($_SESSION['ran1'] / $_SESSION['pot'] * 100) . '%';
header('Refresh: 0; URL=""');
//session_destroy();
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
session_start();
$_SESSION['pot'] = isset($_SESSION['pot']) ? $_SESSION['pot'] + 1 : 1;
$_SESSION['ran'] = isset($_SESSION['ran']) ? $_SESSION['ran'] : 0;
$_SESSION['ran1'] = isset($_SESSION['ran1']) ? $_SESSION['ran1'] : 0;
if(rand(1, 100) <= 35)
{
$_SESSION['ran'] = $_SESSION['ran'] + 1;
}
echo '<br/>Score ' . $_SESSION['ran'] . ' van de ' . $_SESSION['pot'] . ' en dat is ' . round($_SESSION['ran'] / $_SESSION['pot'] * 100) . '%';
if(mt_rand(1, 100) <= 35)
{
$_SESSION['ran1'] = $_SESSION['ran1'] + 1;
}
echo '<br/>Score ' . $_SESSION['ran1'] . ' van de ' . $_SESSION['pot'] . ' en dat is ' . round($_SESSION['ran1'] / $_SESSION['pot'] * 100) . '%';
header('Refresh: 0; URL=""');
//session_destroy();
?>
levert dat geen "Headers already sent at line .." op?
Hipska schreef op 10.01.2009 20:01:
levert dat geen "Headers already sent at line .." op?
Eh, nou je het zegt, eh, nee. Zou toch wel moeten eigenlijk.
Het werkt perfect.
Komt waarschijnlijk omdat je niet echt 'true' (0 === false, "" === false) gegevens teruggeeft?
Er is wel degelijk output vóór de header. Vreemd.
Maar wat zegt dit alles?
http://phphulp.chessweb.eu/santhe.php
Warning: Cannot modify header information - headers already sent by (output started at /home/luukschak/domains/chessweb.eu/public_html/phphulp/santhe.php:15) in /home/luukschak/domains/chessweb.eu/public_html/phphulp/santhe.php on line 23
Warning: Cannot modify header information - headers already sent by (output started at /home/luukschak/domains/chessweb.eu/public_html/phphulp/santhe.php:15) in /home/luukschak/domains/chessweb.eu/public_html/phphulp/santhe.php on line 23
@Yorick: dat weet je als je het uitvoert. Of mt_rand() sneller/beter is dan rand().
yorick17 schreef op 10.01.2009 20:20:
Maar wat zegt dit alles?
Dat het random gedoe wel aardig in de beurt komt van van het zou moeten doen.
Tussenstandje van mijn scriptje:
Score 3552 van de 10150 en dat is 35%
Score 3551 van de 10150 en dat is 35%
PHP Newbie schreef op 10.01.2009 20:23:
http://phphulp.chessweb.eu/santhe.php
Warning: Cannot modify header information - headers already sent by (output started at /home/luukschak/domains/chessweb.eu/public_html/phphulp/santhe.php:15) in /home/luukschak/domains/chessweb.eu/public_html/phphulp/santhe.php on line 23
Warning: Cannot modify header information - headers already sent by (output started at /home/luukschak/domains/chessweb.eu/public_html/phphulp/santhe.php:15) in /home/luukschak/domains/chessweb.eu/public_html/phphulp/santhe.php on line 23
He, bij jou doet ie het niet.
Doet ie van mij het bij jou?
http://www.test.santhe.nl/test.php
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -