Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Tablice array i problem
Micchaleq
post 10.05.2011, 13:28:34
Post #1





Grupa: Zarejestrowani
Postów: 186
Pomógł: 4
Dołączył: 13.10.2009

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


Witam serdecznie,

Mam mały problem, ponieważ moj aktualny skrypt chciałbym sobie przerzucić do klas i niestety napotkałem problem.
Zadania klasy :

- pobranie tekstu, mierzenie jego wielkości, podzielenie go na n wierszy, wycentrowanie góra dól, lewa i prawa, umieszczenie go na obrazku.

Wszystko pięknie ładnie jedyne co jest moim problemem to jezeli podaje 2 teksty na raz ( klasa sama w sobie działa tyle razy ile jest róznych tekstów. )

Nie będe pokazywał całej klasy bo nie jest ona chyba jakoś istotna

  1. $kolumna = 0;
  2. for($j=0;$j<$elementy;$j++){
  3. $spr_text = imagettfbbox($rozmiar_tytulu, 0, $font, $text[$kolumna]);
  4.  
  5. if($spr_text[2]<$szerokosc){
  6. $text[$kolumna] .= $tablica[$j]." ";
  7. echo $text[$kolumna]."<br>";
  8. }
  9. else{
  10. $kolumna+=1;
  11. $j--; // po to by uwzględniało w kolejnej kolumnie ostatni wyraz który jest sprawdzany
  12. }
  13.  
  14. }


problem jest taki, że jeżeli mam więcej niż jeden text to $kolumna przyjmuje wartości 2 i 3 ... ( w przypadku dzielenie tekstu na 2 rzędy )

a dodawanie tekstu działa na podstawie pętli for ( wykonuje się tyle razy ile jest tekstów ) i za każdą razą dodaje tekst 0 i 1 ( oczywiście odpowiednio wyśrodkowany )

Jedyne czego od was potrzebuje to zrozumieć dlaczego tak się dzieje ze mimo iż podaje przed pętlą for, że kolumna przed wejściem do niej ma się równać 0. Wygląda to tak jakby pętla w sobie trzymała ostatnią wartość zmiennej kolumna i przed wejściem do pętli zwiększała ją o 1.

i tak w nawiasie wiem, że wystarczyło by pomnożyć ( w pętli gdzie dodaje się już tekst na obrazek ), ale nie tak chciałbym rozwiązać ten problem.

Ten post edytował Micchaleq 10.05.2011, 13:38:21


--------------------
Go to the top of the page
+Quote Post
nekomata
post 10.05.2011, 15:13:41
Post #2





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

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


Tak patrze.. nie za wiele rozumiem ale czemu masz
  1. if($spr_text[2]<$szerokosc){

jak wczesniej ustawiasz
  1. $spr_text = imagettfbbox($rozmiar_tytulu, 0, $font, $text[$kolumna]);

?

EDIT
A i czemu ( chyba że wczesniej masz $elementy = count (array) )...
  1. for($j=0;$j<$elementy;$j++){

a nie
  1. for($j=0;$j<count($elementy);$j++){


Ten post edytował nekomata 10.05.2011, 15:25:49
Go to the top of the page
+Quote Post
Micchaleq
post 10.05.2011, 15:30:25
Post #3





Grupa: Zarejestrowani
Postów: 186
Pomógł: 4
Dołączył: 13.10.2009

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


Tak jak pisałem wyżej ta cała funkcja działała prawidłowo, jednak po przerzuceniu do klasy już nie działa tak jak trzeba.

Wklejam początek który rozwieje wątpliwości

  1. $t_t = imagettfbbox($rozmiar_tytulu, 0, $font, $tytul);
  2. $ile_rzedow = 2;
  3. $szer = $t_t[2] / $ile_rzedow;
  4. $szerokosc = round($szer);
  5. $tablica = explode(" ", $tytul);
  6. $elementy = count($tablica);


aby to logiczniej ująć można by zastosować pętle do while, poniważ w pierwszyk kroku gdy wejdziemy do pętli zmienna $text jest pusta.

Jedyne co nie działa w tej pętli to zmienna $kolumna, która jak mówiłem wcześniej ( jeżeli pętla głowna wykonuje się 2 razy bo są 2 tytuły do przerobienia ) to przyjmuje wartość 0,1,2,3 a powinna przyjmować 0,1,0,1 ( w przypadku kiedy mamy 2 rzędy tekstu i 2 teksty) , jeżeli dałbym 3 tytuły to było by 0,1,2,3,4,5 a powinno być 0,1,0,1,0,1.

Tak jak również pisałem wyżej nie wiem dlaczego, ale pomimo faktu, żę daje przed pętlą $kolumna = 0 to i tak ( po pierwszym tytule ) $kolumna przyjmuje wartości 2,3...

Twoje pierwsze pytanie:
$text nie jest ustawiona, więc pobranie szerokości z czystego pola = 0.

Ten post edytował Micchaleq 10.05.2011, 15:52:52


--------------------
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: 14.07.2025 - 02:04