« 1 2 »
Autor Zpráva
tajny spion
Profil
Zdravím. Mám 2 scripty na náhodnou hlášku, potřebuji
a) rozhodnout, který je lepsí a který používat
b) poradit ohledne toho 2.

Script první funguje na principu cteni z *.txt souboru po radcich. Je overeny, avsak me trochu nevyhovujici:
function hlaska()
{
$soubor = "hlasky.txt";
$data = file($soubor);
$pocethlasek = count($data)-1;
SRand((double)MicroTime()*1e6);
$nahodnecislo = Rand(0,$pocethlasek);
$vygenerovano = $data[$nahodnecislo];
$vygenerovano = chop($vygenerovano);
return $vygenerovano;
}
echo "<span id="small-caps">Pamatuj:&nbsp;</span>" . hlaska();
?>

Script druhý jsem vymyslel sám, nefunguje. Pls pomozte mi ho rozchodit:
<?php
$hlaska[0] = "Nejaka hlaska první";
$hlaska[1] = "Nejaka hlaska druhá";
$hlaska[2] = "Nejaka hlaska třetí";

$hlaskacount = count($hlaska);
$hlaskaindex = mt_rand(0, $hlaskacount);
echo $hlaska[$hlaskaindex];
?>


Nakonec zbyva rozhodnout, ktery je lepsi. Predstavte si, ze hlasek budu mit 50 (coz je realita). 50 radku uz je nejakej ten kB navic. A to asi neni dobre. Na druhou stranu cteni ze souboru... no, poradte.
Alphard
Profil
<?php
$hlaska[0] = "Nejaka hlaska první";
$hlaska[1] = "Nejaka hlaska druhá";
$hlaska[2] = "Nejaka hlaska třetí";

$hlaskacount = count($hlaska);
$hlaskaindex = mt_rand(0, $hlaskacount-1);
echo $hlaska[$hlaskaindex];
?>
nightfish
Profil
Nakonec zbyva rozhodnout, ktery je lepsi.
lepsi je ten prvni, protoze funguje :-)

co se ti na tom prvním nezdá? co ti na něm nevyhovuje?
tajny spion
Profil
nightfish
Potreboval jsem, aby se nekdo zeptal.
1) chtel bych ho nejak zjednodusit, pokud to jde
2) potrebuji, aby to odkazovalo na soubor hlasky.txt, ktery je v rootu webu. Tj nekam se tam musi dat lomitko. Ja to skousel, ale pokazde mit o hodilo error. V tom je pro me nevyhovujici.

Alphard
Dik vole. To se rika ne? Dobre, tak: Dik
tajny spion
Profil
Alphard
Mimochodem, jak nova je fce mt_rand()? Ptze me to pres localhost stale vypisuje "Nejaka hlaska třetí". A kdyz dam rand(), tak to pekne nahodne strida. Spravi se to na hostingu?

Pro oba
Alpharduv zpusob zabere pri velkem poctu hlasek mnoho mista, je tak?
DJ Miky
Profil
Alpharduv zpusob zabere pri velkem poctu hlasek mnoho mista, je tak?

Můžeš to třeba zredukovat na:

$hlaska=array("Nejaka hlaska první","Nejaka hlaska druhá","Nejaka hlaska třetí");
Alphard
Profil
Alpharduv zpusob zabere pri velkem poctu hlasek mnoho mista, je tak?
není to můj zbůsob, pouze jsem opravil tvůj script, osobně se mi vic líbí ten první (oddělení obsahu od scriptu, ale zjednodušil bych to)

Mimochodem, jak nova je fce mt_rand()?
od PHP 4

Ptze me to pres localhost stale vypisuje "Nejaka hlaska třetí".
kolikrát jsi to zkoušel? 3 hlášky není moc, nečekej, že se to při každé aktualizace změní
jinak jsem to teď zkusil a mně to jde správně (PHP 5)
tajny spion
Profil
Alphard
Mohl bys mi prosim pepsat tedy ten první, aby byl co nejjednodussi? Pr(e)dem dik.

DJ Miky
Dik.
DFly
Profil
klidne prvni verzi
$radky = file(soubor.txt);
echo array_rand($radky);
DFly
Profil
a muzes si pred to dat jeste radku
srand ((double) microtime() * 1e6);
DFly
Profil
take mas moznost databaze, kde se take da nahodne vybirat jeden zaznam
tajny spion
Profil
DFly
DObre, tim padem mame tri moznosti (soubor, pole, db). Ktera je nejlepsi a nejspolihvejsi a zabyra nejmene mista?
Alphard
Profil
tajny spion
nedělej z toho kovbojku...
spolehlive jsou všechny
misto zabírají zhruba stejné
nejrychlejší bude asi varianta s polem, ale nemám to ověřeno
nejlepší – to je relativní (mně se líbí soubor)

něco si vyber a neřeš takovou blbost několik dní :-)
DFly
Profil
tajny spion
pro vetsi mnozstvi dat (napr citaty), to mam udelany pres databazi

pole je vhodne pro minimalni pocet moznosti (kdo to ma v tom scriptu furt menit) napr do 10-20 max
soubor je vhodny tak 10-100, protoze ti to vse leze do pameti, ale je to prehledne a dobre se s tim pracuje
zbytek databaze, kde si vytahnes nahodne treba jen jedinou radku, a dat tam muzes mit neomezene
Alphard
Profil
DFly
plánuje cca 50 záznamů
tajny spion
Profil
DObre, udelam to zatim souborem. Nekdo mel napad na zjednoduseni. Sem snim
Alphard
Profil
Nekdo mel napad na zjednoduseni. Sem snim
zjednodušit jsem to chtěl já, ale popsal to DFly výše, čteš ty příspěky vůbec?
tajny spion
Profil
Aha, to patrilo k tomu? Takze jako tohle...
srand ((double) microtime() * 1e6);
$radky = file(soubor.txt);
echo array_rand($radky);

...plnohodnotne nahradi tohle?
function hlaska() {
$soubor = "hlasky.txt";
$data = file($soubor);
$pocethlasek = count($data)-1;
SRand((double)MicroTime()*1e6);
$nahodnecislo = Rand(0,$pocethlasek);
$vygenerovano = $data[$nahodnecislo];
$vygenerovano = chop($vygenerovano);
return $vygenerovano;
}
echo "<span id="small-caps">Pamatuj:&nbsp;</span>" . hlaska();
?>
DFly
Profil
jj :-)))
tomu programatori rikaji optimalizace :-)))

jak jsem to psal pro info, tak tam mam "chybku"
$radky = file('soubor.txt');

nicmene ti to taky nebrani dat to do funkce, ale je to zbytecne - nacteni do pole provedes jednou, a pak z nej muzes kdykoli nahodne vybirat - coz tva fce taha soubor pokazdy
maximalne muzes zapouzdrit array_rand() pro pripad kdyby po vybrani bylo casem jeste hlasku nejak zpracovat, abys to pak nemusel v kodu prepisovat

a pak si to dat do toho sveho
echo "<span id="small-caps">Pamatuj:&nbsp;</span>" . hlaska();
nightfish
Profil
a pak si to dat do toho sveho
echo "<span id="small-caps">Pamatuj:&nbsp;</span>" . hlaska();


pokud bude v té funkci echo array_rand($radky);, tak tento zápis nebude fungovat správně - nejdřív by se vypsala hláška a pak až ten span... lepší bude v té funkci použít return array_rand($radky);
tajny spion
Profil
DFly, nightfish
Jj, dik, koukam, ze se to postupne da dohromady. Jen abychom nedosli nakonec k puvodnimu reseni :D
DFly
Profil
jsou i taci co si na tyto tri radky udelaji tricu vcetne konstruktoru a destruktoru
to by to pak bylo delsi nez prvni varianta

tajny spion - kolikrat se v tom scriptu nahodne zobrazi hlaska - pokud jednou, nedavej to do fce a nech si ty tri radky...
tajny spion
Profil
DFly
Melo by to vypisovat neco takovehodle:
Pamatuj: Nejaka hlaska

Z toho vyplyva ze pouziji tve triradkove reseni.
tajny spion
Profil
Alphard, DFly, nightfish
No hosi, Vas script

Pamatuj:
<?php
srand((double) microtime() * 1e6);
$radky = file('hlasky.txt');
echo array_rand($radky);
?>


Mi vypisuje misto nahodne hlasky nahodne cislo v rozmezi 0 az (pocet hlasek). Dokazal by mi nekdo vysvetlit proc? Ja uz si s tim vazne nvm rady :(
Btw opakuji: pokuste se prosim udelat to tak, aby se soubor 'hlasky.txt' hledal vzdy v rootu webu a nikoliv v aktualni slozce, jak je tomu ted. Predem dik.
Alphard
Profil
srand((double) microtime() * 1e6);
$radky = file('/hlasky.txt');
echo $radky[array_rand($radky)];
tajny spion
Profil
Alphard
Sice to vypada divne a uz vidim, jak mi bude hlasit, ze soubor nenalezen, ale skusim to. Kazdopadne se ozvu :)
tajny spion
Profil
Alphard
Vyborny... vse jde az na to nacitani z rootu... s lomitkem to hodi error, bez lomitka funguje jak ma. Vi nekdo?
tiso
Profil
tajny spion - zrátaj lomítka v $_SERVER['PHP_SELF'] a potom vypíš pred názov súboru toľkokrát string '../'
tajny spion
Profil
tiso
Vypsat ok, $_SERVER['PHP_SELF'] taky vim co je, ale spocitat pocet urcitych znaku v necem, "to jsme se fakt jeste neucili". Mohl bys mi to pls priblizit?

PS: Proc '../' kdyz odkaz do rootu webu je '/' ?
tiso
Profil
tajny spion - substr_count a str_repeat
PS: - root pre PHP a root webu podľa url sú 2 rozdielne veci... Potrebuješ sa skrátka dostať o tých x zanorených adresárov vyššie...
Alebo mrkni na http://latrine.dgx.cz/php-tipy-a-triky-i
« 1 2 »

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: