Hmm, daar heb ik nog nooit van gehoort.. wel raar eigenlijk dat zo'n standaard rand functie toch een patroon opleverd.
Crayne wat ik uit jou code begrijp is dat je een simpel getal wil hebben en kijkt of deze al eerder is voorgekomen. Dat is opzich wel mogelijk want je zou elke keer dezelfde procentuele kans moeten hebben. (oftewel, altijd hetzelfde getal 4 moet in theorie mogelijk zijn).
Wat mijn probleem alleen was dat hij een bepaald patroon volgde. Dus bijvoorbeeld eerst 3 dan 5 dan 6, dan weer 3 dan 5 dan 6 om het makkelijk te zeggen.
De code zag er alsvolgt uit:
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
27
28
29
30
31
32
33
34
35
36
| for($i=0; $i<1000; $i++) {
$title_en = '';
$title_fr = '';
$title_de = '';
$title_es = '';
$title_nl = '';
// Generate random titles in multilanguage
$forlus = rand(8, 20);
for($j=0; $j<$forlus; $j++) {
$title_en .= $lorem_en[rand(0,count($lorem_en))]." ";
$title_fr .= $lorem_fr[rand(0,count($lorem_fr))]." ";
$title_de .= $lorem_de[rand(0,count($lorem_de))]." ";
$title_es .= $lorem_es[rand(0,count($lorem_es))]." ";
$title_nl .= $lorem_nl[rand(0,count($lorem_nl))]." ";
}
$geonameId = rand(2050000, 3050405);
$randommaand = rand(1,12);
$month = sprintf("%02d", $randommaand );
$randomdag = rand(1,28);
$day = sprintf("%02d", $randomdag );
$year = rand(1200,2009);
$historycat = rand(0,6);
$getal++;
$importid = sprintf("%05d", $getal );
$importid = "historytestdata".$importid.";";
echo "'".$title_en."', '".$title_fr."', '".$title_de."', '".$title_es."', '".$title_nl."', '".$geonameId."', '".$day."', '".$month."', '".$year."', '".$historycat."', '".$importid."'<br />";
} |
Op deze manier kreeg ik na een tijdje precies hetzelfde patroon als in het begin. Bij 1000x had elke rij ongeveer wel een dubbelganger.
Ik heb nu alle functie's vervangen door mt_rand, en dit geeft geen dubbelgangers. Maar ik blijf het raar vinden waarom php dit dan toch als standaard functie houdt.
AMD Phenom II X6 1090T | 2x 4GB Kingston | Geforce GTX 560TI | Creative I-Trigue L3450