Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ile czego ?
Forum PHP.pl > Forum > PHP
invx
nei mam zajawki jak to wykonac:
- wprowadzam dane liczbowe, np z pliku txt.
- sprawdzam ile zostao wpisanych jakich cyfr

macie jakies wskazowki jak sie do tego zabrac ?
kszychu
  1. <?php
  2.  $ilosc_znakow = count_chars((string)$dane_z_pliku);
  3. print_r($ilosc_znakow);
  4. ?>
invx
ale to trzeba konkretnie ile 1 ile 2 ile 3 ile 4 ile 5 ile 6 ile 7 ile 8 ile 8 i ile 0
NuLL
A czy ty moze zagladasz do manuala ? dry.gif
mike
Za koleje pytanie, z którym można sobie poradzić przeszukując funkcje z manuala, dostaniesz ostrzeżenie.
substr_count

  1. <?php
  2.  
  3. for( $i = 0; $i <10; $i++ )
  4. {
  5. echo substr_count( $text_do_przeszukania, $i );
  6. }
  7.  
  8. ?>
NuLL
mike_mech - a ty patrzales co robi ta funkcja ? snitch.gif count_chars zwraca tablice z iloscia wystapien kazdego znaku.

29 sekund szybciej biggrin.gif
kszychu
Cytat(invx @ 2005-10-26 13:35:14)
ale to trzeba konkretnie ile 1 ile 2 ile 3 ile 4 ile 5 ile 6 ile 7 ile 8 ile 8 i ile 0

Sprawdziłeś jak zadziała to, co Ci podałem? Nie zastanowiło Cię po co do prezentacji wyników użyłem print_r() a nie echo?..
W manualu, przy funkcji count_chars() masz bardzo ładny przykład. Trochę samodzielności!

mike_mech: to raczej nie zadziała tak jak trzeba.

I jeszcze komentarz do mojego przykładu. Faktycznie jest on trochę... hmmm.... nadmiarowy biggrin.gif bo zostanie wyświetlona tablica wszystkich znaków z ilością ich wystąpienia (dla większości będzie to 0). Należy jeszcze potraktować ją warunkiem !=0. Ale to wszystko jest w manualu!
mike
Hmmm, może macie trochę racji. Mea culpa.

Ale jakby zrzutować to na stringa to może zadziała.
Niestety nie mam jak w tej chwili sprawdzić :/

Jeśli nie zadziała to przepraszam za wprowadzenie w błąd.

Choć z drugiej strony @invx mógłbyś wreszcie zacząć używać manuala i swojej głowy.
invx
dalej mi to niebardzo odpowiada, mam to napisac nie uzywajac funkcji - mam takowa funkcje stworzyc tongue.gif
kszychu
Będziesz tak po kolei mówił, że to ci nie odpowiada bo zawiera pętle a ty masz bez pętli...
Opisz żesz jakie masz założenia!
NuLL
Ehhhh...
  1. <?php
  2.  
  3. function zbadaj_stringa($string)
  4. {
  5. $ilosci=array();
  6. $c=count($string);
  7. for($i=1;$i<=$c;$i++) $ilosci[$string{$i}]++;
  8.  
  9. return $ilosci;
  10. }
  11.  
  12. ?>

winksmiley.jpg
invx
mam napisac funkcje, ktora z podanego ciagu znakow, lub pliku textowego, pobierze dane, i zwruci ile jest jakich cyfr . Nie wiedzialem ze taak funkkcja istnieje w php, wiec nie napisalem ze mam sam funckje stworzyc tongue.gif
mike
  1. <?php
  2.  
  3. function FunkcjaDlaLeniPatentowanych( $strText )
  4. {
  5. $arrTab = array_fill( 0, 10, 0 );
  6. for( $i = 0, $last = strlen( $strText ); $i < $last; $i++ )
  7. {
  8. $arrTab[ (int)$strText{$i} ]++;
  9. }
  10. return $arrTab;
  11. }
  12.  
  13. ?>


Nie gwarantuję że zadziała bo piszę "z palca" na kompie bez php :/
kszychu
@Null, @mike_mech: fragment $ilosci[$string{$i}]++ w ważysz przykładach wywali notice w przypadku, gdy tego pola jeszcze nie będzie. Dobrze byłoby dać:
  1. <?php
  2.  
  3. if(isset($ilosci[$string{$i}])) $ilosci[$string{$i}]++;
  4. else $ilosci[$string{$i}] = 1;
  5. ?>


Zgadzam sie - NuLL
mike
Cytat(kszychu @ 2005-10-26 15:26:39)
@Null, @mike_mech: fragment $ilosci[$string{$i}]++ w ważysz przykładach wywali notice w przypadku, gdy tego pola jeszcze nie będzie.

No właśnie zabezpieczyłem się przed tym dając:
  1. <?php
  2.  
  3. $arrTab = array_fill( 0, 10, 0 );
  4.  
  5. ?>
NuLL
mike_mech - indexy sa inne - my z Kszychem zapisujemy wg znaku ty natomiast jak ASCII numer znaku. - pozatym twoj tez wywali notice'y jakoze tablica ASCII jest wieksza niz 9.
kszychu
NuLL: nie nie, teraz już nie ma potrzeby wypełniać całej tablicy ASCII, wystarczy 10 pol od 0 do 9. I nie muszą to być kody ASCCI jako indeksy, mogą być cyfry zliczane.
Przykład mike'a jest bardzo fajny. Gdyby dało się ominąć count() to już w ogóle byłoby bez funkcji ;-)
mike
Cytat(kszychu @ 2005-10-26 15:37:41)
Gdyby dało się ominąć count() to już w ogóle byłoby bez funkcji ;-)

1. No właśnie count() było błędem, zmieniłem na strlen();
2. Ale fakt faktem, jedna funkcja zostaje :/ A raczej dwie bo jeszcze jest array_fill(), choć tą można wyeleminować instrukcją warunkową.
dr_bonzo
  1. <?php
  2. function FunkcjaDlaLeniPatentowanych2( $strText )
  3. {
  4.     $arrTab = array_fill( 0, 9, 0 );
  5.     $i = 0;
  6.     foreach( $strText as $element )
  7.     {
  8.         $arrTab[ (int)$element ]++;
  9.         $i++;
  10.     }
  11.     return $arrTab;
  12. }
  13. ?>

smile.gif
// EDIT: dodane $element, LOL zapomnialem o array_fill tongue.gif
mike
@dr_bonzo Twoje rozwiązanie ma jedną wadę:
Cytat
Warning: Invalid argument supplied for foreach() in /home/site/10846/www/test.php on line 6

Nie można w php5 traktować stringów jak tablice w sposób w jaki Ty to zrobiłeś tongue.gif
kszychu
@dr_bonzo: usuń to niepotrzebne $i i będzie miodzio.
dr_bonzo
Spieszylem sie i myslalem ze to tablica ($strText, jasne smile.gif).
a $i++ zostalo bo wczesniej zapomnialem usunac $strText{ $i } -- totalna porazka smile.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.