Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]inkrementacja i dekrementacja zmiennej typu string
qpanas
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 2
Dołączył: 12.05.2008

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


Rozpocząłem niedawno naukę programowania w PHP i napotkałem problem, którego rozwiązania nie zdołałem znaleźć w żadnym posiadanym podręczniku ani znanym mi kursie internetowym. Wyjaśniam w czym rzecz.
Ćwiczyłem stosowanie operatorów na zmiennych. Kiedy doszedłem do etapu inkrementacji i dekrementacji napisałem sobie taki mały kawałek kodu:
  1. <?php
  2. $_a = "z";
  3. echo('1) zmienna typu '.gettype($_a).': '.$_a."
  4. ");
  5.  
  6. $_a = ++$_a;
  7. echo('2) zmienna typu '.gettype($_a).': '.$_a."
  8. ");
  9.  
  10. $_b = $_a++;
  11. echo('3) zmienna typu '.gettype($_b).': '.$_b."
  12. ");
  13. echo('4) zmienna typu '.gettype($_a).': '.$_a."
  14. ");
  15. $_a = --$_a;
  16. echo('5) zmienna typu '.gettype($_a).': '.$_a."
  17. ");
  18.  
  19. $_b = $_a--;
  20. echo('6) zmienna typu '.gettype($_b).': '.$_b."
  21. ");
  22. echo('7) zmienna typu '.gettype($_a).': '.$_a."
  23. ");
  24.  
  25. ?>

Jako wartość zmiennej $_a wstawiałem początkowo liczby i wszystko ładnie działało, ale potem dla testu wstawiłem literę i okazało się, że nie działa dekrementacja tej wartości string. Oto co wyświetla się w przeglądarce:
Cytat
1) zmienna typu string: z
2) zmienna typu string: aa
3) zmienna typu string: aa
4) zmienna typu string: ab
5) zmienna typu string: ab
6) zmienna typu string: ab
7) zmienna typu string: ab

Zacząłem szukać odpowiedzi dlaczego i okazało się, że we wszystkich przykładach operacje są wykonywane wyłącznie na liczbach. Znajomy znajomego stwierdził coś takiego:
Cytat
 trzeba by się wczytać, jak interpretuje php wartość 1 dla ciągu string - może to być kod znaku, albo jego index w tablicy znaków. ++ dodaje kolejny znak, -- nie odejmuje, bo wypada wartość mniejsza od 0 (a ma wartość 0 w tablicy znaków, -1 to nie ma znaku - więc się nie zmienia)
++ i -- nie wykonuje działań w zakresie liczb dodatnich, tylko całkowitych - więc 0 - 1 daje -1, a żaden znak nie ma takiego indeksu
oczywiście, przy założeniu, że a ma indeks 0 ale wątpię, żeby ktoś się zastanawiał, aby na stringach odpowiednio jakieś operacje arytmetyczne przebiegały - skoro nie ma żadnej dokumentacji ...

Sam nie wiem co o tym sądzić. Poza tym jeśli inkrementacja i dekrementacja służą do wykonywania operacji na liczbach, dlaczego inkrementacja działa na literach (zmiennych string). A jeśli można inkrementować literę to czemu niemożliwa jest jej dekrementacja? Błąd w samym php? Nie wierzę w to!

Ten post edytował qpanas 13.05.2008, 21:47:49
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Miałem podobny problem, pisząc funkcje do obsługi plików .xls, gdzie kolumny masz a,b,c.. ad, de itp. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Łatwo sobie z tym poradzić używając range(). Oto przykład użycia, funkcja, która zamienia numer kolumny na odpowiednią literę alfabetu:
  1. <?php
  2. function excel_kolumna($nr_kol){ //zamienia numer kolumny na oznaczenie alfabetyczne
  3.  $literki = range('a','z'); 
  4.  $ile_literek = count($literki);
  5.  $ile_p = floor(($nr_kol-1)/$ile_literek);
  6.  $pierwsza_l = $literki[$ile_p-1];
  7.  $druga_l = $nr_kol-($ile_p*$ile_literek)-1;
  8.  $druga_l = $literki[$druga_l];
  9.  $literka = $pierwsza_l.$druga_l;
  10.  return $literka;
  11. }
  12. ?>
- nie jest to może szczyt profesjonalizmu, ale działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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: 19.09.2025 - 19:28