Kompleksowe tworzenie stron internetowych, webdesign, aplikacje CMS

Podstawowe operacje na liczbach i tekście w PHP

Artykuł został umieszczony w Software Developer's Journal Extra, numer 24 (rok 2006).
Od 2006 roku wiele rzeczy zawartych w artykule mogło się zmienić.

Autor: Michał Gacki

Od zawsze podstawę wszystkich języków programowania tworzyły operacje na liczbach, gdzie proste działania nie wymagają użycia funkcji. W przypadku tekstu służą zazwyczaj standardowe funkcje jakiejś biblioteki. PHP ma ogromny zasób funkcji wbudowanych w siebie, dzięki którym zrobimy z liczbami i tekstem co tylko chcemy.

Podstawowe działania na liczbach

Podstawowe działania na liczbach są logiczne i nie wymagają używania żadnych funkcji. Zacznijmy jednak od małej powtórki z tego zakresu. Wszystkie kroki z tego artykułu będzie można bez problemu zmieścić w jednym pliku .php, np. test.php. Przygotujmy nasz plik do pracy ze standardowymi działaniami. Pamiętajmy, że tego typu operacje wykorzystuje praktycznie każda strona internetowa, widać to nawet w naszych przykładowych realizacjach będących połączeniem wielu elementów języka PHP.

Wracając do tematu - stwórzmy dwie zmienne – a = 2, b = 3:

<?
$a = 2;
$b = 3;
?>

Pierwsze co zrobimy, to dodamy je do siebie. Oczywiście ma to służyć wyłącznie testowi, samo działanie jest przecież banalne:

<?
$a = 2;
$b = 3;
// dodawanie w PHP to normalny znak +
echo $a.' + '.$b.' = '.($a + $b);
?>

Funkcja echo odpowiada oczywiście za wyświetlanie podanych wartości. Powyższa linijka z użyciem tej funkcji wyświetli ciąg na zasadzie „[wartość zmiennej a] + [wartość zmiennej b] = [wynik]”. Składnia tej linijki to także tylko schemat, każdy może przerobić to jak chce lub po prostu wyświetlać sam wynik ( echo $a + $b; ). Użycie zmiennych będzie dla nas wygodniejsze, niż przepisywanie liczb 2 i 3 zamiast $a i $b, szczególnie jeśli rozbudujemy nasz testowy skrypt. Powyższy przykład wyświetli nam w przeglądarce „2 + 3 = 5”, czyli wszystko się zgadza. Dodajmy zatem kolejne działania: odejmowanie, mnożenie i dzielenie.

<?
$a = 2;
$b = 3;
// odejmowanie w PHP to znak -, mnożenie *,
// a dzielenie to /
echo $a.' + '.$b.' = '.($a+$b).'<br />
'.$a.' - '.$b.' = '.($a-$b).'<br />
'.$a.' * '.$b.' = '.($a * $b).'<br />
'.$a.' / '.$b.' = '.($a/$b);
?>

Oczywiście linijkę z echo można zapisać na wiele innych sposobów, nie koniecznie używając tej funkcji, tak by było to dla każdego przejrzyste i kod był zoptymalizowany, ale nie będziemy się w tym artykule nad tym rozwodzić. Powyższy przykład wyświetli nam w przeglądarce:

2 + 3 = 5
2 – 3 = -1
2 * 3 = 6
2 / 3 = 0.66666666666667

Jak widać liczba została poprawnie zaokrąglona w górę do dwóch cyfr po przecinku. Pamiętajmy, że jeśli chcemy dodać liczbę z częścią dziesiętną, musimy posłużyć się kropką zamiast przecinka, gdyż w składni języka przecinek nie jest związany z liczbami, zatem wpisując np. round( 142,5465645,4) PHP zwróci nam błąd mówiący nam, iż podano zbyt wiele parametrów do funkcji. Poprawnie powinno to wyglądać tak: round(142.5465645,4).

<?
$a = 2;
$b = 3;
echo $a.' + '.$b.' = '.($a+$b).'<br />
'.$a.' - '.$b.' = '.($a-$b).'<br />
'.$a.' * '.$b.' = '.($a * $b).'<br />
'.$a.' / '.$b.' = '.round(($a/$b), 2);
?>

Prawdziwym problemem staje się to dopiero, gdy w formularzu chcemy przesłać liczbę, a użytkownik zamiast kropki poda przecinek. Jeśli chcemy liczbę dodać do bazy, lub zaokrąglić, czy też wykonać na niej inne działanie, musimy skorzystać z funkcji do zamiany tekstu. Nie ma się jednak czym martwić, PHP samo za nas przekonwertuje typy i nawet po użyciu funkcji dla tekstu w rezultacie otrzymamy liczbę. Operacja powinna wyglądać tak:

<?
// pobieramy wartość z formularza z pola „liczba”
// do zmiennej $liczba
$liczba = $_POST['liczba'];
$liczba = str_replace(',', '.', $liczba);
?>

Dzięki temu jakakolwiek liczba podana do pola „liczba” z przecinkiem będzie figurowała pod zmienną $liczba już z kropką. Funkcja str _ replace jest bardzo szybka i prosta w użyciu. Pierwszy jej parametr to szukany teskt, drugi parametr to tekst, na który szukany ma zostać zamieniony, a trzeci parametr określa w jakiej zmiennej następuje zamiana. Zamiast używania np. kilka razy tej funkcji z innym tekstem na jednej zmiennej, można podać tablicę. Przykład wykorzystania tablic w tej funkcji zostanie omówiony później.

Złożone działania i ich praktyczne wykorzystanie

Na pierwszy ogień weźmy potęgowanie i pierwiastkowanie. Potęgować możemy na dwa sposoby – albo mnożymy liczbę przez liczbę, czyli np. 2 * 2 * 2 *2, co daje nam 24, albo używamy funkcji. Pierwsza opcja jest bardziej opłacalna w przypadku podnoszenia do kwadratu, jednak jeśli chcemy zapisać wysoką potęgę, sposób ten staje się uciążliwy. Z pomocą przychodzi funkcja pow. Przykład zastosowania:

<?
$a = 3;
echo $a.'^2 = '.pow($a, 2);
?>

Pierwszy parametr funkcji pow to podstawa, drugi to wykładnik. Powyższy przykład podnosi liczbę 3 do potęgi 2, co w rezultacie da nam 9. Przeglądarka wyświetli: „3^2 = 9”. Zapis pow($a, 5) podniesie nam $a do potęgi 5. Pamiętajmy, że nie możemy podnieść liczby np. do potęgi 3.5, funkcja przyjmie wtedy wartość false. Zajmijmy się teraz pierwiastkowaniem:

<?
$a = 4;
echo 'Pierwiastek z '.$a.' wynosi '.sqrt($a);
?>

Funkcja sqrt jest banalna w użyciu – jako jedyny parametr podajemy liczbę do pierwiastkowania. Powyższy przykład wyświetli „Pierwiastek z 4 wynosi 2”. Oczywiście w przypadku liczb niewymiernych otrzymamy przybliżony wynik, np. pierwiastek z 10 – 3.16227766. Czas zająć się przykładem z połączeniem kilku działań:

<?
$a = 2;
$b = 3;
$c = 4;
$wynik = (pow(($a + $b), 3) + $c) *
(sqrt(pow($b, 2)) * sqrt($c));
echo round(($wynik/2), 4);
?>

Przykład pokazuje jak zapisać długie działanie. Wyświetli nam on wynik 387. Nie musimy każdego działania zapisywać osobno, ale należy pamiętać o nawiasach – każde konkretne działanie powinno być zapisane w nawiasie, gdyż kompilator musi widzieć kolejność i zakres ich wykonywania, zwłaszcza jeśli używamy jeszcze funkcji. To jednak nie wszystko. Co jeśli będzie nam potrzebne obliczyć sinus, cosinus lub będziemy potrzebować zaokrąglonej liczby Π? Nie ma problemu – PHP zawiera pełen zestaw funkcji matematycznych oraz przydatne stałe. Jest to jednak już głębszy temat. Szczegółowe opisy tych funkcji można znaleźć w manualu: http://pl2.php.net/ manual/pl/ref.math.php.

Warto zamiast tworzenia nowych zmiennych z obliczonymi wartościami używać stałych, które są domyślnie dostępne w PHP. W każdym miejscu zamiast liczby Π podać po prostu stałą M _ PI, która ma wartość 3.14159265358979323846 (oczywiście możemy ją zaokrąglić funkcją round). Pierwiastek z tej liczby też ma swoją stałą – M _ SQRTPI. Spróbujmy teraz porównać liczby w warunkach. Przyda nam się także znak %, który nie oznacza procent, lecz zwraca resztę z dzielenia. Jest to dobre ćwiczenie do analizy kodu, rozwijające myślenie – jaki będzie wynik? Oczywiście na podanych „na sztywno” liczbach poprawny wynik wyświetli się od razu, ale dla treningu matematyki można liczby te zmieniać i analizować sytuację.

<?
$a = 2;
$b = 3;
$c = 4;
if ($a == $b) {
$wynik = $a * pow($c, 3);
}
else if ($a < $b) {
$a = pow($c, 2);
if ($c == sqrt($a)) {
if (($c % 4) == 0) {
$wynik = pow((M_PI * ($b + $c + sqrt($a))),
2) * $c;
}
else if ($c != $a) {
$wynik = pow((M_SQRTPI * ($a + $b +
sqrt($c))), 3);
}
}
}
echo $wynik;
?>

Przykład ten nie ma żadnego większego sensu i praktycznego zastosowania, pokazuje jednak jak wyglądają warunki z użyciem liczb – nie ma tu żadnych odstępst, składnia wygląda tak samo, jednak samo wykorzystanie % przydać się może chociażby dla ciekawych efektów w wyświetlaniu danych. Założmy, że mamy tabelę z danymi wyświetlaną za pomocą pętli while lub for i chcemy pokolorować rzędy na zmianę kolorami. Powyższy przykład wyświetli tabelę z danymi z tablic, gdzie co drugi rząd będzie miał szare tło – dzięki sprawdzeniu czy index $i dzieli się przez 2, czyli czy jest liczbą parzystą.

Podsumowanie

Temat liczb w PHP jest bardzo rozległy, praktycznie tak wielki jak dział matematyki, gdyż możemy wykonać dowolne działanie, nawet jeśli będzie trzeba napisać do tego własną funkcję. Artykuł ten spełnia tylko rolę ogólnego zapoznania się z liczbami w tym języku, a taka wiedza do zwykłych skryptów jest wpełni wystarczająca, dodatkowe funkcje przysłużą się pewnie w skryptach liczących np. średnie zarobków z danych okresów. Życzymy powodzenia w matematyce z PHP.

Autor: Michał Gacki

Zaufali nam:

i wielu więcej

Nowości »

Postanowiliśmy umieścić poradniki dotyczące tworzenia stron WWW, które opublikowaliśmy kilka lat temu na łamach magazynu PHP Solutions. Są to artykuły prasowe, które od dziś będzie można przeczytać online i zastosować w praktyce. Jeśli jesteś początkującym programistą lub chcesz zacząć swoją przygodę z programowaniem, zapraszamy do lektury. więcej nowości >