Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Losowanie 8 liter, 8 cyfr oraz ich wymieszanie.
Forum PHP.pl > Forum > Przedszkole
jasza
Witam,
Mam za zadanie wylosować 6 liter oraz 6 cyfr a następnie je wymieszać.
Do losowania specjalnie użyłem range, żeby nie powtarzały się litery oraz cyfry.


Stanąłem przy czymś takim:

  1. <?php
  2. $liczby = range(0,9);
  3. shuffle($liczby);
  4. $z= range(a,z);
  5. shuffle($z);
  6.  
  7.  
  8. for ( $i = 0; $i < 6; $i++ )
  9.  
  10. {
  11. echo $liczby[$i];
  12. }
  13.  
  14.  
  15. for( $j = 0; $j < 6; $j++ )
  16.  
  17. {
  18. echo $z[$j] ;
  19. }
  20. ?>


Teraz nie wiem jak najprościej wymieszać taki wynik.

Dziękuję za pomoc i pozdrawiam.
lobopol
Do wylosowania użyj funkcji array_rand, połącz potem wylosowane wyniki w jedną tablicę i możesz na niej użyć shuffle
jasza
Czy mógłbym poprosić kogoś kto ma ew. trochę wolnego czasu o nakierowanie mnie.
Niezbyt sobie radzę jeszcze, aby to wykonać samemu.

Dziękuję, pozdrawiam.
kontur
  1. for($i=0; $i<6; $i++)
  2. {
  3. $tablica[$i]=rand(0,9);
  4. }
  5. for($i=6; $i<12; $i++)
  6. {
  7. $litery=range('a','z');
  8. $size_of_litery=count($litery)-1;
  9. $wylosowana_liczba=rand(0, $size_of_litery);
  10.  
  11. $tablica[$i]=$litery[$wylosowana_liczba];
  12. }
  13.  
  14. shuffle($tablica);
  15.  

bpskiba
Jeżeli losujemy znaki, to po co je mieszaćquestionmark.gif

Czy mamy odrobić Twoje zadanie domowe??
Fifi209
To:
  1. $litery=range(a-z);

Nie ma prawa zadziałać wink.gif

  1. $znaki = array(0,1,2,3,4,5,6,7,8,9,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m);
  2.  
  3. $ciag = "";
  4.  
  5. for ($i=0; $i < 16; i++) {
  6. $ciag .= $litery[array_rand($litery)];
  7. }


Albo
  1. $znaki = array(0,1,2,3,4,5,6,7,8,9,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m);
  2.  
  3. $ciag = "";
  4. $keys = array_rand($litery,16);
  5.  
  6. foreach ($keys as $key) {
  7. $ciag .= $litery[$key];
  8. }


drugi będzie wydajniejszy tak sądzę.
prowseed
@up
  1. range('a', 'z')


wydaje mi sie, ze to ladniejsze rozwiazanie, niz cala tablica znakow, tymbardziej, ze nie masz pewnosci iz zostanie wylosowane akurat 6 liter i 6 cyfr

@jasza
jak juz masz dwie tablice, to wrzuc je do array_merge, pozniej jeszcze raz shuffle i wypluj wszystko
Fifi209
Cytat(prowseed @ 2.05.2012, 00:35:12 ) *
wydaje mi sie, ze to ladniejsze rozwiazanie, niz cala tablica znakow, tymbardziej, ze nie masz pewnosci iz zostanie wylosowane akurat 6 liter i 6 cyfr

Szczególnie że chcemy po 8 ;d


Ilu programistów tyle rozwiązań. wink.gif

Prościej chyba używać uniqid
maxil
no to ja jeszcze swoje rozwiązanie dołożę smile.gif

  1. <?php
  2. $chars = array_flip(array_merge(range(0, 9), range('a', 'z')));
  3.  
  4. for ($i=0, $text=''; $i<8; $i++)
  5. {
  6. $text .= array_rand($chars);
  7. }
  8.  
  9. echo $text;
  10. ?>
jasza
Witam,

Zrobiłem coś takiego:

  1. <?php
  2.  
  3. $liczby = array('0','1','2','3','4','5','6','7','8','9');
  4. shuffle($liczby);
  5. $z= array('q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m');
  6. shuffle($z);
  7. $mm = array();
  8. $z1 = array();
  9.  
  10.  
  11. for ( $i = 0; $i < 6; $i++ )
  12.  
  13. {
  14. $mm .= array($liczby[$i]);
  15. }
  16.  
  17.  
  18.  
  19. for( $j = 0; $j < 6; $j++ )
  20.  
  21. {
  22. $z1.= array($z[$j]) ;
  23. }
  24.  
  25.  
  26.  
  27.  
  28. $tab1 = array_merge(array($mm), array($z1));
  29. shuffle($tab1);
  30. echo $tab1;
  31. ?>


Ale wyświetla mi string Array. Co robię źle?

Nie jest to żadna praca domowa wink.gif

Dziękuję za pomocne wskazówki - wiele się dzięki Wam nowego nauczyłem wink.gif

Pozdrawiam.

p.s. Jeśli byłaby możliwość prosiłbym o pomoc w poprawieniu błędów w moim przykładzie. Bo jak ktoś napisze coś swojego to nie wiem czy będę w stanie to zrozumieć.
redeemer
Skoro zadeklarowałeś $mm i $zl jako tablice, traktuj je jako tablice, a nie string. $mm[] = $liczby[$i]; i analogicznie z $zl. Gdy odwołujesz się do tablic, nie musisz za każdym razem używać array( $tablica ). Dlatego do array_merge przekaż po prostu $mm i $zl. Zamiast echo daj sobie print_r.
Fifi209
Cytat(maxil @ 2.05.2012, 13:26:31 ) *
no to ja jeszcze swoje rozwiązanie dołożę smile.gif

  1. <?php
  2. $chars = array_flip(array_merge(range(0, 9), range('a', 'z')));
  3.  
  4. for ($i=0, $text=''; $i<8; $i++)
  5. {
  6. $text .= array_rand($chars);
  7. }
  8.  
  9. echo $text;
  10. ?>

array_rand losuje klucz nie konkretną wartość wink.gif
prowseed
@Fifi209


Cytat
Losowanie 8 liter, 8 cyfr oraz ich wymieszanie.

vs
Cytat
Mam za zadanie wylosować 6 liter oraz 6 cyfr a następnie je wymieszać.


Uznajmy zatem zgodnie, że siedem : )

@jasza
  1. <?php
  2. $liczby = range(0,9);
  3. shuffle($liczby);
  4. $z= range('a','z');
  5. shuffle($z);
  6. $mm = array();
  7. $z1 = array();
  8. for ( $i = 0; $i < 7; $i++ ){
  9. $mm[] = $liczby[$i];
  10. }
  11. for( $i = 0; $i < 7; $i++ ){
  12. $z1[] = $z[$i] ;
  13. }
  14. $tab1 = array_merge($mm, $z1);
  15. shuffle($tab1);
  16. print_r ($tab1);

na szybko poprawiony Twoj przyklad
jasza
Dzięki własnie tak poprawiłem teraz tylko mam problem bo otrzymuję taki ciąg:

Array ( [0] => 4 [1] => 5 [2] => 7 [3] => 2 [4] => g [5] => 8 [6] => e [7] => f [8] => t [9] => k [10] => 3 [11] => b [12] => 9 [13] => h ) Array

A chciałbym np taki: 2ks05hf82sp5 (czyli np po wejściu na stronę zostanie wylosowany taki kod, który użytkownik będzie mógł sobie skopiować)
kadlub
$n = count($tab1);
for ($i=0;$i<$n; $i++)
echo $tab1[$i];
jasza
Wieeeeeeelkie dzięki Panowie!

Bardzo mi pomogliście. Muszę teraz jeszcze poczytać o tych funkcjach i będę szczęśliwszy o nową wiedzę.

Życzę miłego dnia, weekendu i pozdrawiam smile.gif
nie_za_bardzo_umiem_php_:)
Jak połączyć ten kod:

  1. <?php
  2. $liczby = range(0,9);
  3. shuffle($liczby);
  4. $z= range('a','z');
  5. shuffle($z);
  6. $mm = array();
  7. $z1 = array();
  8. for ( $i = 0; $i < 7; $i++ ){
  9. $mm[] = $liczby[$i];
  10. }
  11. for( $i = 0; $i < 7; $i++ ){
  12. $z1[] = $z[$i] ;
  13. }
  14. $tab1 = array_merge($mm, $z1);
  15. shuffle($tab1);
  16. print_r ($tab1);


z kodem:

  1. $n = count($tab1);
  2. for ($i=0;$i<$n; $i++)
  3. echo $tab1[$i];


questionmark.gifquestionmark.gifquestionmark.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.