Prof. Angela Ghinea
curs programare web
Functii PHP matematice Aici găsiţi funcţii PHP matematice, în special pentru lucrul cu numere. abs(nr)
echo cos(90); ?>
// -0.44807361612917
- Returnează valoarea absolută (cu +) a lui "nr". <?php echo abs(-7.8); echo abs(3); echo abs(-5); ?>
// 7.8 (double /float) // 3 (integer) // 5 (integer)
floor(nr) - Returneaza valoarea rotunjita a lui "nr" la anteriorul (mai mic) intreg.
base_convert(nr, baza1, baza2) - Converteste un numar, "nr", din baza1 in baza2. Rezultatul returnat este un sir cu "nr" convertit in baza2. <?php $nr = 18; // Afiseaza numarul 18 convertit din baza 10 in baza 2 (cod binar) echo base_convert($nr, 10, 2); // 10010 ?> bindec('sir_binar') - Returneaza echivalentul numeric (decimal) al sirului binar din parametrul "sir_binar". <?php echo bindec('10010'); echo bindec('1000'); ?>
// 18 // 8
// 7 // 5 // -3 // 1
fmod(x, y) - Returneaza valoarea ramasa a lui "x" impartit la "y", care nu mai e multiplu de "y". <?php $x = 8.5; $y = 3; $r = fmod($x, $y); + 2.5 = 8.5) ?>
// $r va avea valoarea 2.5 (2 * 3
hypot(c1, c2) - Returneaza lungimea ipotenozei unui triunghi dreptunghic care are lungimea catetelor "c1" si "c2".
ceil(nr) - Returneaza valoarea rotunjita a lui "nr" la urmatorul (mai mare) intreg. <?php echo ceil(7.8); // 8 echo ceil(5); // 5 echo ceil(-2.3); // -2 echo ceil(1.2); // 2 ?> cos(radian) Returneaza valoarea cosinus a gradelor de cerc specificate la "radian". <?php echo cos(30);
<?php echo floor(7.8); echo floor(5); echo floor(-2.5); echo floor(1.2); ?>
<?php echo hypot(3, 4); ?>
// 5
is_infinite(val) - Returneaza TRUE daca valoarea lui "val" este un numar infinit (precum log(0)), altfel, returneaza FALSE. <?php $nr = log(0); if (is_infinite($nr)) echo 'Nr. infinit'; ?>
// 0.15425144988758 lcg_value()
Prof. Angela Ghinea
curs programare web
- Returneaza un numar aleator intre 0 si 1. <?php echo lcg_value(); ?>
// 0.64820835969476
<?php echo pi(); echo M_PI; ?>
// 3.1415926535898 // 3.1415926535898
pow(nr, putere)
log10(nr) - Returneaza logaritmul in baza 10 a lui "nr"..
- Returneaza valoarea obtinuta din "nr" la puterea "putere".
<?php echo log10(1000); ?>
<?php echo pow(4, 3); ?>
// 3
// 64
log(nr, baza)
round(nr)
- Returneaza logaritm de "nr" in baza "baza". Daca al doilea parametru nu e specificat, va returna logaritmul natural (in baza e).
- Returneaza valoarea rotunjita a lui numar la intregul ce mai apropiat.
<?php echo log(9, 3); ?>
<?php echo round(7.8); echo round(5); echo round(-2.5); echo round(1.2); ?> sin(radian)
// 2
max(nr1, nr2, ...) - Returneaza cel mai mare numar dintre cele date la parametri. <?php echo max(9, 3, 8, 78, 55); ?>
// 78
min(nr1, nr2, ...) - Returneaza cel mai mic numar dintre cele date la parametri. <?php echo max(9, 3, 8, 78, 55); ?> mt_rand(min, max)
// 3
// 8 // 5 // -3 // 1
- Returneaza valoarea sinus a gradelor de cerc specificate la "radian". <?php echo sin(30); echo sin(90); ?> sqrt(nr)
// -0.98803162409286 // 0.89399666360056
- Returneaza radical din "nr". <?php echo sqrt(225); ?>
// 15
tan(radian)
- Returneaza un numar aleator cuprins intre numerele "min" si "max". Similara este si functia rand(), dar "mt_rand()" este de 4 ori mai rapida.
- Returneaza valoarea tangenta a gradelor de cerc specificate la "radian".
<?php echo mt_rand(9, 55); ?> pi()
<?php echo tan(30); echo tan(90); ?>
// 47
- Returneaza valoarea aproximativa a lui PI. La fel ca si constanta M_PI.
// -6.4053311966463 // -1.9952004122082
is_numeric(val) - Returneaza TRUE daca "val" e o valoare numerica, altfel, FALSE.
Prof. Angela Ghinea <?php $x = 32/3; if (is_numeric($x)) echo "E un numar si are valoarea:
curs programare web $x"; // E un numar si are valoarea: 10.666666666667 ?>
Operaţii cu şiruri de caractere
Lungimea $s = "acesta este un text"; $sir = "stiu PHP stiu HTML stiu CSS"; # ce lungime are sirul? (numarul de caractere) print strlen( $s ); // 19
Căutarea unei secvenţe # verific daca un cuvant sau text (in cazul de fata cuvantul 'PHP') apare in # sirul exprimat prin variabila $sir if( strstr( $sir, 'PHP' ) !== false ) print 'gasit'; else print "nu am gasit"; # pentru a nu tine cont de litere mari/mici se foloseste stristr if( stristr( $sir, 'phP' ) !== false ) print 'gasit';
Afişarea unui subşir # afisez o sectiune din sir print substr( $sir, 0, 4); // stiu print substr( $sir, 5 ); // PHP stiu HTML stiu CSS print substr( $sir, 5, -3 ); // PHP stiu HTML stiu print substr( $sir, -3 ); // CSS # returnez doar un caracter din string print $sir{5}; // P print $sir{ strlen($sir)-1 }; // S
Transformarea şirului # inlocuirea unor secvente print str_replace( "stiu", "invat", $sir); // invat PHP invat HTML invat CSS # schimb tipul literelor (mari, mici) print strtoupper( $s ); // ACESTA ESTE UN TEXT print strtolower( $sir ); // stiu php stiu html stiu css print ucfirst( $s ); // Acesta este un text print ucwords( $s ); // Acesta Este Un Text # sterg spatiile de la inceput si sfarsit: trim, ltrim, rtrim print trim(' ok '); // ok
Prof. Angela Ghinea
curs programare web
# caractere "enter" transformate in <br /> print nl2br( "acesta e afisat pe \n 2 linii" ); // acesta e afisat pe <br /> 2 linii
Împărţirea (spargerea) şirului # impart sirul dupa un caracter (sau regex) $output1 = split( " ", $s ); // impart dupa spatiu /* Array ( [0] => acesta [1] => este [2] => un [3] => text ) */ # impart sirul dupa un cuvant (sau un alt sir) - nu regex sau caracter $output2 = explode( "stiu ", $sir ); // impart dupa stiu<spatiu> /* Array ( [0] => PHP [1] => HTML [2] => CSS ) */ # operatia inversa impartirii unui sir: $a = implode( 'invat ', $output2 ); // invat PHP invat HTML invat CSS $b = join( ' ', $output1 ); // acesta este un text
Notă: implode şi join sunt echivalente (nu există nicio diferenţă între ele), pe când explode şi split sunt diferite. Interpretarea şirului # parsez un Query String $str = "first=value&arr[]=foo+bar&arr[]=baz"; parse_str($str); print $first; // value print $arr[0]; // foo bar print $arr[1]; // baz parse_str($str, $output); print $output['first']; // value print $output['arr'][0]; // foo bar print $output['arr'][1]; // baz
Măsuri de siguranţă print addslashes( "Baiatu' ia vino-ncoa'!" ); # Baiatu\' ia vino-ncoa\'! # functia inversa este stripslashes(); print htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
Prof. Angela Ghinea
curs programare web
# afiseaza &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt; # functia inversa este htmlspecialchars_decode() print strip_tags( "<p>E <b>bold</b></p>" ); // E bold print strip_tags( "<p>E <b>bold</b></p>", '<b>' ); // E <b>bold</b>
Operaţii comune cu indicatori de timp Limbajul PHP oferă soluţii simple (dar puternice) pentru lucrul cu data şi timpul. În versiunile mai noi (dupa 5.1) sunt introduse facilităţi avansate cum ar fi DST (Daylight Saving Time), Timezones, Date Intervals, ş.a. Fiind vorba de un număr pozitiv ce are mereu aceeaşi referinţă, este uşor să se realizeze operaţii cum ar fi scăderea, adunarea sau compararea a două date reprezentate printr-un Unix timestamp. Mai jos sunt câteva aplicaţii menite să evidenţieze cât de uşor se pot manipula date şi ore în PHP. <?php // data curenta print date( 'd.m.Y H.i.s' ); // 29.05.2010 09.43.15 // data in format Unix (UNIX timestamp) print time(); // 1275115395 // alegerea unui fus orar date_default_timezone_set( 'Europe/Bucharest' ); // parsarea unei date print strtotime("now"); print strtotime('1st January 2004'); //1072915200 ?>
Cum aflu o dată din trecut sau viitor? Sunt mai multe posibilităţi. Se poate pleca de la o dată cunoscută (pentru care avem Unix timestamp) şi prin adunari/scaderi de secunde se afla data dorita (vezi aplicatia de mai jos). Sau se poate parsa o data folosind strtotime. Aceste solutii nu sunt intotdeauna aplicabile, iar in aceste cazuri se foloseste functia mktime. Functia mktime primeste ca parametri anul, luna, ziua, ora pentru care se doreste aflarea detaliilor. Rezultatul este un timestamp ce poate fi formatat dupa cum se doreste. <?php # care este timestamp-ul pentru 31 januarie 2004, ora 13:00 echo mktime( 13, 0, 0, 1, 31, 2004); // afiseaza 1075546800 # care este timestamp-ul pentru 3 septembrie 2014, ora 10:30 echo mktime( 10, 30, 0, 9, 3, 2014); // afiseaza 1409729400 # ultima zi a unei luni poate fi exprimata ca ziua "0" a lunii urmatoare. $ultima = mktime(0, 0, 0, 3, 0, 2000); echo strftime("Ultima zi din Februarie 2000 este: %d", $ultima ); // afiseaza Ultima zi din Februarie 2000 este: 29 # se pot folosi si valori negative $zi = mktime(0, 0, 0, 3, -3, 2000); echo strftime("Inainte de Martie 2000 cu 4 zile: %d", $zi ); // afiseaza Inainte de Martie 2000 cu 4 zile: 26 ?>
Prof. Angela Ghinea
curs programare web
Cum determin ce zi şi oră va fi peste 480 ore? Pentru a efectua uşor operaţii cu zile şi ore, se va folosi formatul de dată Unix (UNIX timestamp), returnat de funcţia time(). Practic, data este afişată ca numărul de secunde scurs de la 1 ianuarie 1970, ora 00:00. Având această nouă perspectivă (de a privi datele ca un număr de secunde), operaţiile cu date (de genul 'cât va fi peste 2 zile', 'ce oră a fost acum n minute' etc) devin extrem de simple luând forma unor simple scăderi şi adunări de secunde. <?php // cerinta este: "cat va fi ora peste 480 de ore, adica peste (480 * 60 *60) secunde $acum = time(); $maiTarziu = 480 /*ore*/ * 60 /*minute*/ * 60 /*secunde*/; print "Data ceruta este: " . date( 'd.m.Y H.i.s', $acum + $maiTarziu ); // Data ceruta este: : 18.06.2010 09.43.15 ?>
Cum validez o dată sau un timp? Sunt mai multe modalităţi de a valida datele şi orele introduse de un utilizator, în funcţie de formatul acestora. Cel mai uzual însă se folosesc cele 2 funcţii de aflare a timestamp-ului: mktime şi strtotime. Acestea returnează anumite valori în cazul în care data verificată nu este validă. <?php # verificam daca a existat 29 februarie 2004 $rezultat = mktime( 0, 0, 0, 2, 29, 2004 ); if( $rezultat === FALSE || $rezultat === -1 ) { # daca rezultatul nu este un timestamp inseamna ca data nu e valida echo "Data nu exista"; } else { echo "Data este valida"; } // Rezultat: Data este valida # similar se foloseste si strtotime $rezultat = strtotime( "29 february 2010" ); if( $rezultat === FALSE || $rezultat === -1 ) { echo "Data nu exista"; } else { echo "Data este valida"; } // Rezultat: Data este valida ?>
Prof. Angela Ghinea
curs programare web
Cum afişez un mesaj de salut în funcţie de ora curentă (a serverului)? <?php $t = localtime( time(), true ); // returneaza un vector cu elementele datei si orei locale $h = $t[ 'tm_hour' ]; // iau doar ora if( $h >= 7 && $h <= 11 ) print "Buna dimineata!"; elseif( $h > 11 && $h < 18 ) print "Buna ziua!"; elseif( $h >= 18 && $h < 22 ) print "Buna seara!"; elseif( $h >= 22 ) print "Noapte buna!"; else print "Ce? Esti treaz(a) la ora asta?"; // Buna dimineata! ?>
Cum afişez luna curentă şi toate cele 12 luni în limba română? Notă: această secvenţă de cod depinde de configurările serverului pe care este executată. Limba română trebuie instalată pe server pentru a avea rezultatele scontate. <?php setlocale( LC_TIME , 'ROM_ROM' ); // afiseaza numele celor 12 luni for( $m = 1; $m <= 12; $m++ ) { print strftime( "%B", mktime( 0,0,0, $m, 1, 2008 ) ) . "\n"; } // afiseaza luna curenta print 'Luna curenta este: ' . strftime( "%B", time() ); ?>
Cum determin durata de executie a unui script PHP? <?php $time_start = microtime(true); # la inceputul codului PHP /* ... codul PHP cu diverse operatii ... */ # la final se face diferenta si se afiseaza $time_end = microtime(true); print "Durata de executie (secunde): " . ( number_format($time_end - $time_start, 6) ); // Durata de executie (secunde): 0.032175 ?>
Prof. Angela Ghinea
curs programare web
TEMĂ
1. Să se creeze un minicalendar în lb română pentru vara anului 2010 folosind un script PHP intercalat într-o pagină web. Vă rog să folosiţi pt aspectul paginii elemente de formatare HTML sau stiluri CSS. În antetul calendarului afişaţi o poză de vară. 2. Să se afişeze mesaje personalizate de voi în funcţie de oră, ca la un exerciţiu de mai sus. Puteţi afişa şi text şi imagini. Formatările textului şi imaginilor vor fi făcute astfel încât pagina creată să aibă aspect cât mai frumos. 3. Creaţi un script PHP în care să atribuiţi unei variabile tip şir de caractere o valoare şi să se determine dacă conţine cuvântul vara sau dacă conţine majuscule. 4. Atribuiţi unei variabile valoarea unei date calendaristice şi determinaţi valoarea ei dacă adăugăm o săptămână.