Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Tablice array i problem
Forum PHP.pl > Forum > Przedszkole
Micchaleq
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.
nekomata
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++){
Micchaleq
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.
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.