Autor Zpráva
DeBon
Profil
Ahoj...

Generuju random 2 čísla od jedný do dvacítky...

$random_index = mt_rand(1, 20);
$random_index--;
$random_index1 = mt_rand(1, 20);
$random_index1--;

Jak by se nechala udělat podmínka, aby mi to nevygenerovalo 2 stejný čísla zároveň?

Díky..
Timy
Profil
V tomhle případě bude asi nejjednodušší, když zkontroluješ, jestli je $random_index různé od $random_index1. Pokud není, necháš vygenerovat nové číslo.

Můžeš si taky čísla, z kterých se bude náhodné číslo generovat, ukládat do pole a po vygenerování prvního čísla toto číslo odstraníš z pole.
DeBon
Profil
Jo jasný... ale co když mi vygeneruje podruhý stejný číslo.. Všechny možnosti sem nezajistil.. i když pravděpodobnost je značně menší nemůžu říct, že to nenastane. Krom toho vymazat nemůžu protože potřebuju obě čísla naráz..

Napadlo mě akorát tohle.. ale přijde mi to takový neohrabaný... a navíc se to načítá nějak dlouho.. A teď se to nakonec nanačetlo protože to zrušilo proces kvůli dlouhýmu času:-(

$random_index = mt_rand(1, 20);


$random_index1 = mt_rand(1, 20);
if ($random_index1!=$random_index) {
while ($random_index1!=$random_index) {
$random_index2 = mt_rand(1, 20);
}
}

$random_index--;
$random_index1--;
Timy
Profil
DeBon
Přesně tak jsem to myslel.

Nebo si naplň pole čísly 1—20. Pak vylosuj číslo od 0—19 a vytáhni z pole hodnotu o tomto indexu. Tu následně z pole odstraň. Pak vylosuj číslo 0—18 a zase vytáhni z pole hodnotu.
DeBon
Profil
Jééé sem vůl
$random_index = mt_rand(1, 20); 


$random_index1 = mt_rand(1, 20); 
if ($random_index1==$random_index) { 
while ($random_index1!==$random_index) { 
$random_index2 = mt_rand(1, 20); 
} 
} 

$random_index--; 
$random_index1--;


mi to nešlo, protože sem tam dal blbě podmínku.. Už píšu a nemyslim:-D
Timy
Profil
Mimochodem proč hned po vylosování náhodné čísla obě čísla dekrementuješ? Nebude jednodušší vylosovat číslo v rozmezí o jedna menším?
DeBon
Profil
Jak to myslíš? Že když mám číslo od 1 do 20 udělám random a druhej random dělat od 1 do 19?
Jestli takhle tak když mi to třeba hodí random číslo 6, tak v druhym rozmezí číslo 6 taky mám a navíc se připravim o číslo 20.. to bych to jinak musel dělat v rozmezí od 1 do x-1 a od x+1 do 20 když to mám včetně a to mi přijde složitější.. nebo jaks to myslel?
krteczek
Profil
DeBon: ne myslel to tak proč negeneruješ čísla hned od nula po 19?
pokud jde o náhodný výběr z array tak zkus array_rand();
DeBon
Profil
Jo takhle... Už to vidim jaks to myslel.... Myslim si že to nebude jednodužší.. Minimálně by ti to zabralo víc řádků... A číslo 20 sem uved jako přídlad já tam mam normálně měnnou proměnnou místo toho..
Ale díky
krteczek
Profil
když je hned po vygenerování snížíš o 1
Joker
Profil
DeBon
Myslim si že to nebude jednodužší.. Minimálně by ti to zabralo víc řádků...
Oni myslí tohle:
$random_index = mt_rand(1, 20);
$random_index--;

Tj. náhodné číslo od 1 do 20 a pak se sníží o 1. Proč raději negenerovat rovnou náhodné číslo od 0 do 19?
$random_index = mt_rand(0, 19);
nightfish
Profil
jinak ten tvůj kód by šel zkrátit na
$random_index = $random_index1 = mt_rand(1, 20);
while ($random_index1 == $random_index) { $random_index1 = mt_rand(1, 20); }
DeBon
Profil
Joker
Jo takhle to bylo myšleno.. Ono to byl jen příklad místo 20 tam mám (count($files) a $files mám array...
Ale jo to je asi taky pravda že bych tam moh napsat ((count($files))-1)..

Nightfish
To je zajímavý... Díky
Timy
Profil
A já to myslel nějak takhle:

function deleteFromArray($array, $key)
{
	$newArray = array();
	$index = 0;
	
	for($i = 0; $i < count($array); $i++)
	{
		if($i != $key)
		{
			$newArray[$index++] = $array[$i];
		}
	}
	
	return $newArray;
}

$pocetCisel = 3;
$pole = array();

for($i = 0; $i < $pocetCisel; $i++)
	$pole[$i] = $i + 1;

$index = mt_rand(0, $pocetCisel - 1);
$random_index = $pole[$index];
$pole = deleteFromArray($pole, $index);

$index = mt_rand(0, $pocetCisel - 2);
$random_index1 = $pole[$index];


Napsal jsem si vlastní funkci na odstranění prvku z pole — nevím jestli už PHP něco takového má. Jestli jo, tak se kód docela zkrátí.
nightfish
Profil
vylepšení Timyho kódu
$pole = array();
for ($i = $min; $i <= $max; $i++) $pole[] = $i;
shuffle($pole);
$random_index = array_pop($pole);
$random_index1 = array_pop($pole);


EDIT: nahrazeno array_rand za shuffle a za $min v cyklu místo čárky středník
Joker
Profil
nightfish
Vida, na tohle jsem snad ještě nenarazil a přitom se mi to zdá jako dost dobrý způsob, jak vybrat více různých náhodných čísel z nějaké dané řady...

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: