Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Liczenie ilości wystąpień każdej cyfry
thomson89
post 20.02.2011, 12:47:01
Post #1





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


Witam!

Mam tablicę:

1 | 23; 45; 78; 19; 29
2 | 14; 58; 19; 28; 17
3 | 28; 73; 91; 51; 18

Chciałbym teraz policzyć ile razy dana cyfra wystąpiła w danym zbiorze.

Proszę o pomoc!



--------------------
Sklep 70%
Go to the top of the page
+Quote Post
greycoffey
post 20.02.2011, 13:10:50
Post #2





Grupa: Zarejestrowani
Postów: 320
Pomógł: 29
Dołączył: 3.04.2010

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


  1. <?php
  2. $tablica = array( array(23,45,78,19,29), array(14,58,19,28,17), array(28,73,91,51,18));
  3.  
  4. foreach($tablica as $val)
  5. {
  6. foreach($val as $value)
  7. {
  8. ++$zlicz[$value];
  9. }
  10. }
  11.  
  12. foreach($zlicz as $key=>$value)
  13. {
  14. echo "$key: $value razy<br/>";
  15. }
  16. ?>
Go to the top of the page
+Quote Post
Valdi_B
post 20.02.2011, 15:40:15
Post #3





Grupa: Zarejestrowani
Postów: 107
Pomógł: 30
Dołączył: 19.02.2011
Skąd: Warszawa

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


Może czepiam się szczegółów, ale poprzedni przykład zlicza liczby, a Ty chcesz zliczać cyfry (przynajmniej tak napisałeś).
Przy okazji chciałem pokazać jak obyć się bez własnych pętli.
Proponuję coś takiego:
  1. <?php
  2. // Dane źródłowe
  3. $tablica = array( array(23,45,78,19,29),
  4. array(14,58,19,28,17), array(28,73,91,51,18));
  5.  
  6. // Kumuluj znaki w $tt (callback)
  7. function join_chr($value, $key) {
  8. global $tt; // tu kumulujemy znaki
  9. $tt .= $value;
  10. }
  11.  
  12. // Wydruk klucz / wartość (callback)
  13. function prt_chr($item, $key) {
  14. echo chr($key) . " => $item<br />";
  15. }
  16.  
  17. // Kumuluj znaki z $tablica
  18. array_walk_recursive($tablica, 'join_chr');
  19. echo "tt: $tt<br />"; // Produkt połąćzenia
  20.  
  21. $lc = count_chars($tt, 1); // zlicz znaki
  22. echo "Wystąpienia cyfr:<br />";
  23. array_walk($lc, 'prt_chr');
  24. ?>
Jest to zarazem przykład, że:
- nie musisz robić własnej pętli "chodzącej" po tablicy, załatwia to array_walk,
- zliczanie znaków też możesz załatwić dedykowaną funkcją.

Uwaga: count_chars daje w wyniku tablicę, w której kluczami są kody znaków, dlatego potem przy wydruku trzeba je "przerobić" na znaki (chr(...)).

Oczywiście - nic za darmo, trzeba dopisać funkcje callback.
Per saldo - chyba się opłaca.
"Właściwy" program jest króciutki. Żadnych pętli, a wszystkie 3 operacje:
- skumulowanie znaków,
- zliczenie częstości,
- wydruk wyniku
wykonujesz pojedynczymi instrukcjami.
Go to the top of the page
+Quote Post
Fifi209
post 20.02.2011, 16:23:21
Post #4





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

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


Jak wy kombinujecie.

array_count_values


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

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: 28.05.2025 - 20:54