Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Funkcja zliczajaca
-mastique-
post
Post #1





Goście







Problem jest prosty i bardzo frustrujace jest dla mnie to, ze nie wiem co robie zle, dlatego prosze o podpowiedz a nie rozwiazanie.

Funkcja ma zliczac ile razy dana wartosc wystapiala w calej tablicy dwuwymiarowej:
  1. function policz($tablo)
  2. {
  3. for($ini=0;$ini<50;$ini++) //inicjuje tablice zliczen zerami
  4. $policzone[$i]=0;
  5. for($row=1;$row<sizeof($tablo);$row++) //przeszukuje tablice po indeksach $row i $col
  6. {
  7. for($col=2;$col<8;$col++)
  8. {
  9. $liczona=$tablo[$row][$col];
  10. //dotad wszystko dziala, ale wiersz ponizej sie juz nie wykonuje i zwrocona zostaje tablica zer
  11. $policzone[$liczona]++;
  12. }
  13. }
  14. return $policzone;
  15. }

Go to the top of the page
+Quote Post
poli25
post
Post #2





Grupa: Zarejestrowani
Postów: 239
Pomógł: 20
Dołączył: 19.02.2010

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


A a nie dlatego ze masz
Cytat
$policzone[$i]=0;
questionmark.gif

function policz($tablo)

{

for($i=0;$i<50;$i++) //inicjuje tablice zliczen zerami

$policzone[$i]=0;

for($row=1;$row<sizeof($tablo);$row++) //przeszukuje tablice po indeksach $row i $col

{

for($col=2;$col<8;$col++)

{

$liczona=$tablo[$row][$col];

//dotad wszystko dziala, ale wiersz ponizej sie juz nie wykonuje i zwrocona zostaje tablica zer

$policzone[$liczona]++;

}

}

return $policzone;

}
echo $ilosc=var_dump(policz(5));



p.s. nie wiem czy cos pomoze?

Ten post edytował poli25 22.03.2012, 11:04:45
Go to the top of the page
+Quote Post
-Gość-
post
Post #3





Goście







Cytat(poli25 @ 22.03.2012, 10:59:20 ) *
A a nie dlatego ze masz
questionmark.gif


tam w 1 petli tablica jest tylko deklarowana zerami i wykonuje sie to tylko raz podczas dzialania funkcji na samym poczatku zeby potem "dala sie" inkrementowac w kolejnej petli. Bez tej deklaracji napewno nie zadziala.
Go to the top of the page
+Quote Post
poli25
post
Post #4





Grupa: Zarejestrowani
Postów: 239
Pomógł: 20
Dołączył: 19.02.2010

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


Ale co to za funkcja skoro niezaleznie od parametru wprowadzonego daje ten sam wynik? Co Ty chcesz osiągnąć?
Go to the top of the page
+Quote Post
-mastique-
post
Post #5





Goście







Cytat(poli25 @ 22.03.2012, 11:10:25 ) *
Ale co to za funkcja skoro niezaleznie od parametru wprowadzonego daje ten sam wynik? Co Ty chcesz osiągnąć?


Funkcja ma wypluc jako wynik tablice w ktorej jest zliczona ilosc wystapien danej liczby w tablicy $dane. np jesli w tablicy $dane liczba 8 wystapiala 14 razy to $policzone[8] bedzie rowne 14. I tak- niezaleznie od tablicy dane wynik zawsze jest taki sam, a ja nie potrafie znalezc bledu :/
Go to the top of the page
+Quote Post
Rysh
post
Post #6





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Rozumiem, że wysyłasz do funkcji tablicę array przykładowo taką:
  1. $zmienna = array(1, 2, 3, 3, 3, 2, 1, 5, 5, 2, 4, 2, 1);

I w odpowiedzi chcesz otrzymać:
  1. $wynik = array(1 => 3, 2 => 4, 3 => 3, 4 => 1, 5 => 2);

?


--------------------
Go to the top of the page
+Quote Post
-mastique-
post
Post #7





Goście







Cytat(Rysh @ 22.03.2012, 12:55:09 ) *
Rozumiem, że wysyłasz do funkcji tablicę array przykładowo taką:
  1. $zmienna = array(1, 2, 3, 3, 3, 2, 1, 5, 5, 2, 4, 2, 1);

I w odpowiedzi chcesz otrzymać:
  1. $wynik = array(1 => 3, 2 => 4, 3 => 3, 4 => 1, 5 => 2);

?


tak dokladnie o cos takiego mi chodzi. Popelniam jakis strasznie glupi blad i nie jestem w stanie go zdiagnozowac, narazie doszedlem juz do tego, ze w najbardziej zagniezdzonej petli for tablica $policzone przyjmuje juz zalozone wartosci, ale petli o stopien wyzej juz nie. Zacma umyslowa
Go to the top of the page
+Quote Post
Rysh
post
Post #8





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Cytat(mastique @ 22.03.2012, 13:13:29 ) *
tak dokladnie o cos takiego mi chodzi. Popelniam jakis strasznie glupi blad i nie jestem w stanie go zdiagnozowac, narazie doszedlem juz do tego, ze w najbardziej zagniezdzonej petli for tablica $policzone przyjmuje juz zalozone wartosci, ale petli o stopien wyzej juz nie. Zacma umyslowa

Ja bym na Twoim miejscu spróbował napisać tą funkcję od nowa.

Wypadało by zacząć od założenia, czy tablica którą przesyłasz jest jednowymiarowa czy więcej.


--------------------
Go to the top of the page
+Quote Post
-mastique-
post
Post #9





Goście







Cytat(Rysh @ 22.03.2012, 13:18:11 ) *
Ja bym na Twoim miejscu spróbował napisać tą funkcję od nowa.

Wypadało by zacząć od założenia, czy tablica którą przesyłasz jest jednowymiarowa czy więcej.


Pomoglo rzutoeanie typow (int)$liczona i dziala jak chcialem, chociaz nie jestem pewny dlaczego bylo to konieczne. Pewnie domyslnie tablica indeksowala sie stringami.
Go to the top of the page
+Quote Post
Sky_walker
post
Post #10





Grupa: Zarejestrowani
Postów: 214
Pomógł: 23
Dołączył: 26.09.2005

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


zasada jest dość prosta:
jeśli piszesz funkcje w których na wejściu musisz mieć konkretny typ zmiennej - stosuj rzutowanie typów. Po pierwsze pozbędziesz się problemów z nieprawidłowym typem wejściowym (warto stosować warunki typu is_integer albo is_array i wypluwać odpowiednie błędy) a po drugie unikniesz problemów takich jak ten smile.gif


--------------------
Pomogłem? Kliknij poniżej.
Dzięki! :D
Go to the top of the page
+Quote Post
Rysh
post
Post #11





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Wypadało by w sumie jeszcze sprawdzić czy $tablica jest tablicą i w razie czego zwrócić false:
  1. function zlicz($tablica) {
  2. foreach($tablica as $wartosc) {
  3. $zlicz[$wartosc]++;
  4. }
  5. return $zlicz;
  6. }


--------------------
Go to the top of the page
+Quote Post
-mastique-
post
Post #12





Goście







Dzieki za porady i pomoc, dzien uwazam za udany: +1 do wiedzy praktycznej:)
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 Aktualny czas: 19.08.2025 - 22:54