Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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
 
Start new topic
Odpowiedzi (1 - 11)
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;
(IMG:style_emoticons/default/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
(IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:54