Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Losowanie 8 liter, 8 cyfr oraz ich wymieszanie.
jasza
post 1.05.2012, 10:37:42
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 1.05.2012

Ostrzeżenie: (0%)
-----


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.

Ten post edytował jasza 1.05.2012, 10:40:43
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
lobopol
post 1.05.2012, 11:19:11
Post #2





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

Ostrzeżenie: (0%)
-----


Do wylosowania użyj funkcji array_rand, połącz potem wylosowane wyniki w jedną tablicę i możesz na niej użyć shuffle


--------------------
Go to the top of the page
+Quote Post
jasza
post 1.05.2012, 15:58:12
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 1.05.2012

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
kontur
post 1.05.2012, 16:45:59
Post #4





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 3.04.2012

Ostrzeżenie: (0%)
-----


  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.  



Ten post edytował kontur 1.05.2012, 23:41:20
Go to the top of the page
+Quote Post
bpskiba
post 1.05.2012, 21:10:05
Post #5





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


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

Czy mamy odrobić Twoje zadanie domowe??
Go to the top of the page
+Quote Post
Fifi209
post 1.05.2012, 21:20:39
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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ę.

Ten post edytował Fifi209 1.05.2012, 21:24:58


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
prowseed
post 1.05.2012, 23:35:12
Post #7





Grupa: Zarejestrowani
Postów: 433
Pomógł: 64
Dołączył: 29.01.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@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


--------------------
Go to the top of the page
+Quote Post
Fifi209
post 2.05.2012, 10:50:40
Post #8





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
maxil
post 2.05.2012, 12:26:31
Post #9





Grupa: Zarejestrowani
Postów: 212
Pomógł: 11
Dołączył: 8.11.2008
Skąd: Sieradz

Ostrzeżenie: (10%)
X----


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. ?>
Go to the top of the page
+Quote Post
jasza
post 2.05.2012, 17:35:48
Post #10





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 1.05.2012

Ostrzeżenie: (0%)
-----


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ć.


Ten post edytował jasza 2.05.2012, 17:46:28
Go to the top of the page
+Quote Post
redeemer
post 2.05.2012, 17:44:25
Post #11





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Fifi209
post 2.05.2012, 18:22:04
Post #12





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
prowseed
post 3.05.2012, 00:42:18
Post #13





Grupa: Zarejestrowani
Postów: 433
Pomógł: 64
Dołączył: 29.01.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@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

Ten post edytował prowseed 3.05.2012, 00:42:52


--------------------
Go to the top of the page
+Quote Post
jasza
post 3.05.2012, 10:16:54
Post #14





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 1.05.2012

Ostrzeżenie: (0%)
-----


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ć)

Ten post edytował jasza 3.05.2012, 10:18:33
Go to the top of the page
+Quote Post
kadlub
post 3.05.2012, 10:31:34
Post #15





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

Ostrzeżenie: (0%)
-----


$n = count($tab1);
for ($i=0;$i<$n; $i++)
echo $tab1[$i];
Go to the top of the page
+Quote Post
jasza
post 3.05.2012, 11:23:15
Post #16





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 1.05.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
-nie_za_bardzo_umiem_php_:)-
post 5.05.2012, 07:41:16
Post #17





Goście







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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.06.2025 - 05:45