Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Funkcja zliczajaca
Forum PHP.pl > Forum > Przedszkole
mastique
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. }

poli25
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?
Gość
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.
poli25
Ale co to za funkcja skoro niezaleznie od parametru wprowadzonego daje ten sam wynik? Co Ty chcesz osiągnąć?
mastique
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 :/
Rysh
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);

?
mastique
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
Rysh
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.
mastique
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.
Sky_walker
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
Rysh
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. }
mastique
Dzieki za porady i pomoc, dzien uwazam za udany: +1 do wiedzy praktycznej:)
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.