Portál AbcLinuxu, 11. května 2025 10:28

Dotaz: Problém s funkcí rand v php

2.4.2012 11:41 SCP
Problém s funkcí rand v php
Přečteno: 447×
Odpovědět | Admin
Zdravím, mám v mysql 15364 řádků a potřebuji náhodně pro každý řádek vygenerovat v PHP náhodné číslo do 1 do 15635.

zkoušel jsem to takto.. ale výsledek je takový, že se uloží stejné číslo cca 30x po sobě a pak následuje číslo jiné, nevíte proč nemá každý řádek jiné číslo? Díky
for ($i = 1; $i < 15364; $i++) {
$rand = rand(1,15635);
$stmt = $pdo->prepare('UPDATE iny SET lok = ?');
$stmt->execute(array($rand));
$stmt->fetch(PDO::FETCH_ASSOC);
}

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.4.2012 12:22 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Problém s funkcí rand v php
Odpovědět | | Sbalit | Link | Blokovat | Admin
srand -uješ?
2.4.2012 12:39 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Problém s funkcí rand v php
Odpovědět | | Sbalit | Link | Blokovat | Admin
Hele, rozumím dobře tomu, že se snažíš vygenerovat 15364 náhodný celých čísel rovnoměrně rozdělených v rozsahu 1 až 15635 a divíš se tomu, že ve výsledku jsi našel 30 stejných čísel? Pokud ano, obrat svoji pozornost ke statistice místo PHPka. :)
2.4.2012 12:53 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Problém s funkcí rand v php
Pardon, 30 je na tohle už moc, maximální počet stejných čísel by měl být spíš tak osm. Ale rozhodně nebudeš mít každé číslo jiné!

Pokud jsem správně pochopil, co generuješ, tak v případě 30 shodných čísel máš rozbitý generátor anebo chybu někde jinde. Každopádně se srand to nemá moc společného.
2.4.2012 13:06 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Problém s funkcí rand v php
Podle komentářů u online manuálu PHPka to vypadá, že generátor od rand() může být na některých implementacích skutečně dost rozbitý. Někdo místo něj doporučoval mt_rand(). Kdyžtak víc viz dokumentace na php.net (já to zas moc podrobně nečetl).
2.4.2012 14:08 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Problém s funkcí rand v php
Odpovědět | | Sbalit | Link | Blokovat | Admin
30× po sobě je dost divné, 30× stejné číslo ve vygenerované množině asi nepravděpodobné, zkuste fci mt_rand().
Nicméně co ten SQL příkaz?, každým dotazem upravujete pole lok ve všech záznamech tabulce iny, nějaký WHERE nechybí?
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
2.4.2012 14:30 SCP
Rozbalit Rozbalit vše Re: Problém s funkcí rand v php
Ano, přesně tak, WHERE byl ten problém :-( Nechápu jak jsem to mohl přehlídnout :-(

Tohle už funguje jak má... Díky moc
for ($i = 1; $i < 15364; $i++) {
$rand = rand(1,15635);
$stmt = $pdo->prepare('UPDATE iny SET lok = ? WHERE id = ?');
$stmt->execute(array($rand, $i));
$stmt->fetch(PDO::FETCH_ASSOC);
}
rADOn avatar 2.4.2012 14:52 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Problém s funkcí rand v php
Odpovědět | | Sbalit | Link | Blokovat | Admin
Můžeš se taky na rand() v php úplně vybodnout a vyrobit si náhodné číslo sql funkcí.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
5.4.2012 12:18 Honza Vrana
Rozbalit Rozbalit vše Re: Problém s funkcí rand v php
Krasny den,

chtel jsem napsat to same, pridavam priklad:

UPDATE iny SET lok=round(rand()*1523);

nevim jestli to nahodne cislo potrebujete furt stejne, jestli to nepouzivate jen na nahodne serazeni protoze pak lze v mysql pouzit i RAND pri selectu

cily SELECT * FROM iny ORDER BY RAND();

I kdyz pri vetsim poctu radku to nemusi mit zrovna optimalni vykon.

Honza Vrana

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.