Strona 1 z 2
funkcja rand oraz tablica
Napisane: sobota, 17 marca 2012, 01:23
przez tajger
Chce stworzyć pętle ktora bedzie mi losowac NUMER PESELA. Wiadomo, że pesel jest 11-cyfrowy. Problem jest taki, że podczas losowania do 9 cyfer wszysztko jest ok tzn. losowanie jest prawidłowe, a gdy dodaję kolejne 0 lub 9, żeby podwyższyć losowanie liczb np. przy losowaniu już liczb 10 lub 11 cyfowych to na peirwszym miejscu losowania zawsze stoje jedynka, potem jest albo 0,1,2,3 lub 4.. a reszte liczb losuje jakos .. czy funkcja rand ma jakiś zakres losowania liczb?
tutaj mamy liczbe 9 cyfrową (prawidłowo losuje)
tutaj mamy liczbe 10 cyfrową (nieprawidłowo losuje)
Code: Zaznacz cały
echo var_dump(rand(1000000000,9999999999));
drugie pytanie:
Czy jest to normalne zagnieżdżanie tablic w tablicach tym sposobem, który sobie wymyśliłem.. w tym momencie nowa tablica nie ma nazwy, ale jak się do niej odwołać?
Code: Zaznacz cały
$tab = array();
$tab[1] = array (23,45,67,1,2,56,78);
echo "<pre>";
print_r($tab);
echo "</pre>";
lepszy jest ten sposób:
Code: Zaznacz cały
$tab[1] = ($tab2 = array (23,45,67,1,2,56,78));
.. ale jestem strasznie ciekaw jak się odwołać/wypisać dany element z tego:
$tab[1] = array (23,45,67,1,2,56,78); ??
Re: funkcja rand oraz tablica
Napisane: sobota, 17 marca 2012, 10:01
przez Morfidon
Liczby mają zakres, nie możesz stworzyć liczby nieskończenie wielkiej. Jeśli chcesz mieć dłuższą liczbę to w takim wypadku losuj zakres od 1 do 9 kilkakrotnie i połącz te liczby w całość.
Powinno się pisać tak:
Code: Zaznacz cały
$tab = array();
$tab[] = array (23,45,67,1,2,56,78);
echo "<pre>";
print_r($tab);
echo "</pre>";
$tab[0][0] - to 23. Stworzyłeś tak tablicę dwuwymiarową.
Ten pierwszy sposób jest lepszy, jest czytelny i wiadomo o co chodzi.
Re: funkcja rand oraz tablica
Napisane: sobota, 17 marca 2012, 13:08
przez tajger
... a ja myślałem że w tab[1] tworzę tablicę jednowymiarową o iluś tam elementach, a tak naprawdę to są tablice dwuwymiarowe na to wygląda
z randem to chyba sobie podziele że najpierw 5 liczb a potem 6 liczb np.
Code: Zaznacz cały
echo rand(10000,99999).rand(100000,999999);
chyba zadziała idę testować
Re: funkcja rand oraz tablica
Napisane: sobota, 17 marca 2012, 15:51
przez tajger
Jak zrobić, żeby elementy losowe nie powtarzały się? Myślałem o jakims ifie, ale jak to porównać? Chce aby po prostu elementy z tablicy wyświetliły się w innej kolejności - niepowtórzone. Moim zdaniem jest to przydatne naprawdę. Będziemy mieli kiedyś tablice i z niej wypisujem randomowo elementy aby się nie powtórzyły.
Code: Zaznacz cały
$tablica = array (1 => "Łukasz", "Iza", "Marek", "Grzesiek", "Damian");
$e=1;
while ($e++ <= count($tablica))
{
echo $tablica[rand(1, count($tablica))]."<br />";
}
Re: funkcja rand oraz tablica
Napisane: niedziela, 18 marca 2012, 00:58
przez tajger
prawie to jest ukończone tylko nie potrafię co zrobić tego jeśli się powtórzy to co napisać w ELSIE .. to powinny byc jakies 2 albo 1 pętla która to by zrobiła moim zdaniem...
Code: Zaznacz cały
$tablica = array (1 => "Łukasz", "Iza", "Marek", "Grzesiek", "Damian");
$e=1;
while ($e <= count($tablica))
{
if ($e==1)
{
$x1 = $tablica[rand(1, count($tablica))];
echo $x1."<br />";
}
if ($e==2)
{
$x2 = $tablica[rand(1, count($tablica))];
if ($x2 != $x1)
echo $x2."<br />";
else
echo "powtórzyło się [$x2]<br />";
}
if ($e==3)
{
$x3 = $tablica[rand(1, count($tablica))];
if (($x3 != $x1) && ($x3 != $x2))
echo $x3."<br />";
else
echo "powtórzyło się [$x3]<br />";
}
if ($e==4)
{
$x4 = $tablica[rand(1, count($tablica))];
if (($x4 != $x1) && ($x4 != $x2) && ($x4 != $x3))
echo $x4."<br />";
else
echo "powtórzyło się [$x4]<br />";
}
if ($e==5)
{
$x5 = $tablica[rand(1, count($tablica))];
if (($x5 != $x1) && ($x5 != $x2) && ($x5 != $x3) && ($x5 != $x4))
echo $x5."<br />";
else
echo "powtórzyło się [$x5]<br />";
}
$e++;
}
echo "<pre>";
print_r($tablica);
echo "</pre>";
Re: funkcja rand oraz tablica
Napisane: niedziela, 18 marca 2012, 21:18
przez Morfidon
Musisz zrobić pętlę zagnieżdżoną. Losujesz element, a następnie następna pętla w pierwszej pętli sprawdza wszystkie dotychczasowe elementy. Jeśli jeden z elementów się powtórzy to musisz powtórzyć wykonanie pętli. Kod ten nie powinien być dłuższy niż parę linijek...
Re: funkcja rand oraz tablica
Napisane: niedziela, 18 marca 2012, 22:01
przez tajger
też tak myślałem... ale tak patrzę kurde na ten kod to tego moim zdaniem jest za dużo.. wydaje mi sie ze caly program mozna zrobic w 1 lub w 2 petlach... a jakby np. zrobić żeby element wylosowany kasować z tablicy .. da siętak zrobić?
Re: funkcja rand oraz tablica
Napisane: poniedziałek, 19 marca 2012, 09:12
przez Morfidon
To co mówię jest najlepszym rozwiązaniem, w razie gdyby wylosowało powtórzony element, to przypisujesz do tego samego miejsca nową wartość, czyli teoretycznie starą usuwasz.
Re: funkcja rand oraz tablica
Napisane: poniedziałek, 19 marca 2012, 13:01
przez tajger
ok spróbuję to zrobić...
weź ogarnij to.. próbowałem tę funkcję ale jakoś dziwnie losuje i działa
http://www.php.net/manual/en/function.array-rand.php
Re: funkcja rand oraz tablica
Napisane: poniedziałek, 19 marca 2012, 17:00
przez tajger
zrobiłem IFAMI: (aż wstyd na to patrzeć, dal odróżnienia wyników tj. rezultatów końcówki w zależności dodałem)
Code: Zaznacz cały
<?php
$tablica = array (1 => "Łukasz", "Iza", "Marek", "Grzesiek", "Damian");
$x1 = $tablica[rand(1, count($tablica))];
echo $x1."_1<br />";
$x2 = $tablica[rand(1, count($tablica))];
if ($x2 != $x1)
echo $x2."_2<br />";
else
{
do
{
$x2 = $tablica[rand(1, count($tablica))]; //losuj dopóki $x2 będzie różne od $x1
if ($x2 != $x1)
echo $x2."_22<br />";
}
while ($x2 == $x1);
}
$x3 = $tablica[rand(1, count($tablica))];
if (($x3 != $x1) && ($x3 != $x2))
echo $x3."_3<br />";
else
{
do
{
$x3 = $tablica[rand(1, count($tablica))];
if (($x3 != $x1) && ($x3 != $x2))
echo $x3."_33<br />";
}
while (($x3 == $x1) || ($x3 == $x2));
}
$x4 = $tablica[rand(1, count($tablica))];
if (($x4 != $x1) && ($x4 != $x2) && ($x4 != $x3))
echo $x4."_4<br />";
else
{
do
{
$x4 = $tablica[rand(1, count($tablica))];
if (($x4 != $x1) && ($x4 != $x2) && ($x4 != $x3))
echo $x4."_44<br />";
}
while (($x4 == $x1) || ($x4 == $x2) || ($x4 == $x3));
}
$x5 = $tablica[rand(1, count($tablica))];
if (($x5 != $x1) && ($x5 != $x2) && ($x5 != $x3) && ($x5 != $x4))
echo $x5."_5<br />";
else
{
do
{
$x5 = $tablica[rand(1, count($tablica))];
if (($x5 != $x1) && ($x5 != $x2) && ($x5 != $x3) && ($x5 != $x4))
echo $x5."_55<br />";
}
while (($x5 == $x1) || ($x5 == $x2) || ($x5 == $x3) || ($x5 == $x4));
}
... teraz musze to przerobić na pętle bardziej BO się musi to dać ..
