Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] array_push() i foreach() dodawanie i wyświetlanie wyników
mpps
post
Post #1





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


witam.
mam funkcję, która generuje losowe liczby.
potrzebuję dodać wygenerowane liczby do osobnej tablicy, w której będę mógł je porównać i określić, czy się powtarzają, i jeśli tak, to ile razy.
  1. <?php
  2. function generate(){
  3. global $tablicaliczb;
  4. $ile  = 6; // ile liczb
  5. $od = 1; // przedział od
  6. $do = 100; // przedział do
  7.  
  8. $range = range($od, $do);
  9. $rand = array_rand($range, $ile);
  10.  
  11. foreach($rand as $key){
  12. echo $liczba.$endl;
  13.  
  14. $tablicaliczb = array($liczba); //to nie działa (wyświetla tylko ostatnią wygenerowaną liczbę)
  15. array_push($tablicaliczb, $liczba); //to też...
  16. }
  17. }
  18.  
  19. $ilosclosowan = 10;
  20. $i = 1;
  21. while($i <= $ilosclosowan){
  22. generate(); //to działa
  23. $i++;
  24. echo "<br>";
  25. }
  26.  
  27. echo "<p>wylosowane liczby i ich powtarzalność:<br>";
  28. print_r($tablicaliczb); //wyświetla tylko ostatnią wygenerowaną liczbę
  29. ?>

może ktoś z Was ma pomysł?

pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mpps
post
Post #2





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


z pierwszą częścią problemu już sobie poradziłem.

@JoShiMa oj nieładnie... uważasz, że oprócz ciebie nikt manuali nie czyta? zadałem konkretne pytanie nt. rozwiązania problemu, a nie 'co to jest za funkcja array()'

@rgalka niestety nie. błąd był tu:
  1. <?php
  2. $tablicaliczb = array($liczba); //powinno być:
  3. $tablicaliczb = $liczba; //bo $liczba już jest tablicą: $liczba = $range[$key]; - tej linii zabrakło w kodzie... sorry
  4. ?>

rozwiązanie wygląda tak:
  1. <?php
  2. function generate(){
  3. global $tablicaliczb;
  4. $ile  = 10; // ile liczb
  5. $od = 1; // przedział od
  6. $do = 100; // przedział do
  7.  
  8. $range = range($od, $do);
  9. $rand = array_rand($range, $ile);
  10.  
  11. foreach($rand as $key){
  12. $liczba = $range[$key];
  13. echo $liczba;
  14. $tablicaliczb[] = $liczba;
  15. }
  16. }
  17.  
  18. $ilosclosowan = 10;
  19. $i = 1;
  20. while($i <= $ilosclosowan){
  21. generate();
  22. $i++;
  23. echo "<br>";
  24. }
  25.  
  26. //wyświetlamy nową tablicę
  27. function pokaztabliceliczb($tablicaliczb)
  28. {
  29. $buf = '';
  30. foreach($tablicaliczb as $key => $value){
  31. $buf .= $value.", ";
  32. }
  33. return $buf;
  34. }
  35.  
  36. echo pokaztabliceliczb($tablicaliczb);
  37. ?>

tu widzimy, że wszystkie dane ładnie zostały wpisane do nowej tablicy.

teraz druga część zadania:
ponieważ dane w tablicy się powtarzają, chcę je wyświetlić w ten sposób, że wyświetlę wszystkie dane wraz z podaniem ilości powtórzeń, np.

23 - 2
14 - 1
35 - 4
itd...

mogą być posortowane od najmniejszej do największej występującej liczby...
nawet nie wiem, jak się do tego zabrać na ten moment...
Go to the top of the page
+Quote Post
JoShiMa
post
Post #3





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Cytat(mpps @ 3.06.2008, 15:37:37 ) *
@JoShiMa oj nieładnie... uważasz, że oprócz ciebie nikt manuali nie czyta? zadałem konkretne pytanie nt. rozwiązania problemu, a nie 'co to jest za funkcja array()'

No i masz tam konkretne funkcje, które za Ciebie odwalą robotę. A jak musisz ręcznie to zrób hasza. Kluczem niech będzie wartość wartością niech będzie ilość powtórzeń. Potem polecisz po kluczach hasza i wyświetlisz co trzeba. Ja bym tak zrobiła, gdybym nie umiała skorzystać z gotowych funkcji.

  1. <?php
  2. for($i=0;$i<count($tablicaliczb){
  3.  $hasz[$tablicaliczb[$i]]++;
  4. }
  5.  
  6. foreach($hasz as $wartosc => $ilosc_powtorzen){
  7.  echo "$wartosc - $ilosc_powtorzen<br/>";
  8. }
  9. ?>


A żeby były posortowane to możesz albo posortować tablicę przed zrobieniem hasza, albo posortować hasza po kluczach na oba przypadki masz gotowe funkcje w manualu.

Ten post edytował JoShiMa 4.06.2008, 07:55:49
Go to the top of the page
+Quote Post
pyro
post
Post #4





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(JoShiMa @ 4.06.2008, 08:49:17 ) *
No i masz tam konkretne funkcje, które za Ciebie odwalą robotę. A jak musisz ręcznie to zrób hasza. Kluczem niech będzie wartość wartością niech będzie ilość powtórzeń. Potem polecisz po kluczach hasza i wyświetlisz co trzeba. Ja bym tak zrobiła, gdybym nie umiała skorzystać z gotowych funkcji.

  1. <?php
  2. for($i=0;$i
  3.  $hasz[$tablicaliczb[$i]]++;
  4. }
  5.  
  6. foreach($hasz as $wartosc => $ilosc_powtorzen){
  7.  echo &#092;"$wartosc - $ilosc_powtorzen
  8. &#092;";
  9. }
  10. ?>


A żeby były posortowane to możesz albo posortować tablicę przed zrobieniem hasza, albo posortować hasza po kluczach na oba przypadki masz gotowe funkcje w manualu.


JoShiMa, w 7 lini w twoim kodzie jest błąd, dałeś plusy nie tam gdzie trzeba
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 4.10.2025 - 22:38