php împărțire cu rest. Prelucrarea numerelor și operații matematice

Acest subiect este important deoarece aproape toate aplicațiile au un fel de operație de calcul. Operațiile asupra numerelor sunt prezentate în tabelul de mai jos.

Operații aritmetice în php

Cred că acești operatori nu au nevoie de prea multe explicații. Iată un exemplu de utilizare a fiecăruia dintre ele:

\$num2 = ". $num2; //Exemplu de însumare: ecou"
\$num1 + \$num2 = ". ($num1 + $num2); //Exemplu de scădere: ecou"
\$num1 - \$num2 = ". ($num1 - $num2); // Exemplu de multiplicare: ecou"
\$num1 * \$num2 = ". $num1 * $num2; //Exemplu de diviziune: ecou"
\$num1: \$num2 = ". $num1 / $num2; //Un exemplu de restul diviziunii: ecou"
\$num1 % \$num2 = ". $num1 % $num2; //Exemplu de incrementare în formă de prefix: ecou"
++\$num1 = ". ++$num1; //Acum $num1 = 11 $num1=10; //a atribuit valoare inițială //Exemplu de incrementare în formă de prefix post: ecou"
\$num1++ = ". $num1++; //Acum $num1 = 11 $num1=10; //a fost atribuită valoare inițială //Exemplu de decrementare sub formă de prefix: ecou"
--\$num1 = ". --$num1; $num1=10; //Exemplu de decrementare în formă post-prefix: ecou"
\$num1-- = ". $num1--; ?>

Rezultatul executării codului de mai sus:

$num1 = 10
$num2 = 7
$num1 + $num2 = 17
$num1 - $num2 = 3
$num1 * $num2 = 70
$num1: $num2 = 1,42857142857
$num1 % $num2 = 3
++$num1 = 11
$num1++ = 10
--$num1 = 9
$num1-- = 10

Diferența dintre forma prefix și postprefix:

  • sub formă de prefix(++ în fața variabilei) mai întâi se incrementează cu unu, apoi este afișat rezultatul
  • sub formă de post-prefix(++ este după variabilă) rezultatul este afișat mai întâi, iar apoi creșterea este deja efectuată

Pentru a înțelege mai bine diferența, voi da exemplu clasic, care este dat în multe manuale de programare:

//Atribuiți valori variabilelor:$num1 = 10; $num2 = 7; $rez = ++$num1 + $num2; // rezultatul va fi 18 ecou"
\$rez = ". $rez; //Atribuiți valoarea inițială $num1:$num1 = 10; $rez = $num1++ + $num2; // rezultatul va fi 17 ecou"
\$rez = ". $rez; //Operațiile ++ și -- pot fi aplicate și la șiruri$str = "abc"; ecou"
„.++$str; // rezultatul va fi șirul „abd” ?>

Este demn de remarcat faptul că atunci când adăugați variabile, pot fi utilizate două tipuri de înregistrări:

  • $num1 = $num1 + $num2 - notație normală;
  • $num1 += $num2 este prescurtarea. Rezultatul acestor operațiuni va fi același. Notația abreviată poate fi folosită și cu scăderi și înmulțiri.

operatori de comparație în php

Operatorii de comparație sunt utilizați în testele de condiții if și așa mai departe. Cu toate acestea, în această lecție nu vom lua în considerare declarații condiționale, și luați în considerare numai operatorii de comparație. Toți operatorii de comparație sunt listați în tabelul de mai jos:

Nu este nimic complicat aici, principiul este același ca la matematică. Singura particularitate este că adevărat (adevărat) este 1, iar fals (fals) este 0. Oferim exemplu detaliatîn PHP:

//Atribuiți valori variabilelor:$num1 = 10; $num2 = 7; echo "\$num1 > \$num2 = ". ($num1 > $num2); //obține 1 (10 > 7 - dreapta) echo „\$num1 //obține 0 (10 // Poți scrie mai ușor: ecou"
10 // 0 ecou "
20 // 0 ecou "
1 == 1 = ". (1 == 1); // 1 ecou "
0 == \"\" = ". (0 == ""); // 1 ecou "
0 === 0 = ". (0 === 0); // 1 ecou "
0 === \"\" = ". (0 === ""); // 0 ecou "
adevărat = ". adevărat; // 1 ecou "
fals = ". fals; // 0 ?>

Notă:

  • Dacă este fals, 0 nu va fi scos
  • Operatorul de echivalență returnează 1 numai dacă există o potrivire exactă. De exemplu, 0 == "" este adevărat, dar 0 === "" nu mai este adevărat deoarece nu există o potrivire exactă.

Operațiile logice există în toate limbajele de programare și PHP nu o excepție. Pe lângă împărțirea simplă, înmulțirea, adunarea sau scăderea, există și diviziuni întregi și reziduale, despre care vom vorbi acum și, de asemenea, le vom analiza folosind exemple detaliate.

Împărțirea întregului este rezultatul părții întregi a divizării. De exemplu, dacă împărțim 5 la 2, obținem 2, nu 2,5.

Cu diviziunea reziduală, totul este diferit. Aceasta este rezultatul restului de împărțire cu un număr întreg. De exemplu, împărțind același cinci, veți obține nu 2, ci 1, deoarece împărțind 5 la 2, obținem 2, iar restul rămâne 1.

Cum se efectuează diviziunea întregului în PHP

De exemplu, în Python această împărțire se face cu un operator simplu: „//”.

Si in PHP nu va fi atât de ușor să faci asta, dar totuși procesul nu necesită super cunoaștere a limbii.

Să dăm un exemplu despre cum poate fi implementat acest lucru.

LA PHP A șaptea versiune a funcției arată astfel:

Intdiv();

Într-o versiune mai veche, aceeași funcție arată astfel:

Există, de asemenea, o modalitate pentru toate versiunile:

Podea();

Cum să aplici?

De exemplu, să luăm prima funcție, toate celelalte sunt efectuate în același mod.

$rezultat = intdiv(10, 3); echo $rezultat;

Diviziune reziduală în PHP

Pentru a afișa restul întreg al unei diviziuni în php, doar pune operatorul „%”.

$i = 10% 3; eco $i;

După cum putem vedea, totul este destul de simplu și nu necesită explicații lungi.

Unde se poate aplica?

Cunoașterea diviziunii întregi în PHP va fi foarte util dacă trebuie să comparați două numere, să creați un număr flip (un exercițiu popular) sau, de exemplu, un program numit FizzBuzz. Esența lui este că trebuie să scrieți un ciclu de la 1 la 100, care împarte fiecare număr la 3 și la 5. Dacă numărul împărțit la 3 a lăsat 0 în rest, atunci scriem Fizz, dacă este împărțit la 5, atunci Buzz și dacă , împărțind atât 5 cât și 3, în rest obținem 0, atunci scriem FizzBuzz. Acesta este un loc de muncă foarte popular în interviurile de angajare. Dacă ai făcut-o singur, poți fi mândru de tine.

Sau, de exemplu, trebuie să tipărim toate numerele sale (4, 5, 2) de la numărul 452.

Concluzie

Desigur, diviziunile întregi și restul sunt utile și destul de comune, nu sunt la fel de convenabile de utilizat ca în Python, dar totuși importante.

Acum sunteți cu un pas mai aproape de a învăța un limbaj de programare php, iar în viitor vei deveni și mai aproape dacă ești la fel de harnic în a depăși dificultățile.

Este puțin probabil ca programatorii care trebuie să efectueze calcule numerice, științifice sau statistice responsabile să considere un limbaj de scripting web drept candidat acceptabil pentru acest rol. Dar acestea fiind spuse, limbajul PHP oferă un set grozav de caracteristici care oferă o soluție completă la majoritatea problemelor de matematică care apar în scripturile web. În plus, limbajul PHP oferă câteva caracteristici mai avansate, cum ar fi aritmetica cu precizie arbitrară, precum și facilități pentru hashing biblioteci și biblioteci criptografice.

Dezvoltatorii limbajului PHP au adoptat o abordare bine fundamentată și nu au făcut nicio încercare de a reinventa roțile concepute în acest scop. Faptul este că multe dintre cele mai fundamentale funcții matematice utilizate în limbajul PHP sunt doar învelișuri în jurul echivalentelor acestor funcții în limbajul C.

Operatii matematice

Majoritatea operațiilor matematice din limbajul PHP sunt efectuate sub formă de funcții încorporate, nu sub formă de operații. Pe lângă operațiile de comparare, PHP oferă cinci operații aritmetice simple, precum și unele operații de prescurtare care vă permit să scrieți expresii de creștere și decreștere mai scurte, precum și atribuiri.

Operatii aritmetice

Cele cinci operații aritmetice de bază includ acele operații care sunt de obicei implementate în orice calculator cu patru funcții, precum și operația modulo (%). O scurtă descriere a operațiilor aritmetice este dată în tabel:

Operatii aritmetice
Operațiune Descriere
+ Returnează suma valorilor celor doi operanzi ai săi
- Dacă există doi operanzi, atunci valoarea operandului din dreapta este scăzută din valoarea celui din stânga. Dacă există doar operandul corect, atunci operația returnează valoarea acestui operand cu semnul opus
* Returnează produsul valorilor celor doi operanzi ai săi
/ Returnează rezultatul în virgulă mobilă al împărțirii valorii operandului din stânga la valoarea operandului din dreapta
% Returnează restul împărțirii întregi a valorii operandului din stânga cu valoarea absolută a operandului din dreapta

Atunci când utilizați primele trei operații aritmetice descrise mai sus (+, -, *) în program, trebuie luat în considerare faptul că atunci când aceste operații sunt efectuate, tipul se propagă de la valori cu virgulă mobilă cu precizie dublă la valori întregi. Aceasta înseamnă că dacă ambii operanzi ai operației sunt numere întregi, atunci rezultatul este un număr întreg, iar dacă cel puțin unul dintre operanzi este un număr în virgulă mobilă cu precizie dublă, atunci rezultatul este un număr în virgulă mobilă cu precizie dublă. Același tip de propagare a tipului are loc atunci când se efectuează o operație de divizare; în plus, există un astfel de efect suplimentar încât rezultatul devine un număr cu virgulă mobilă cu precizie dublă dacă împărțirea nu este efectuată fără un rest (întreg).

Operatorul modulo (%) din PHP preia operanzi întregi, iar dacă această operație este aplicată numerelor în virgulă mobilă cu precizie dublă, atunci aceste numere sunt mai întâi convertite în numere întregi (prin eliminarea părții fracționale). Rezultatul unei astfel de operații este întotdeauna un număr întreg.

Operatii de crestere si scadere

O mare parte din sintaxa PHP este moștenită de la C, iar programatorii C au o reputație de concizie și mândrie în ea. Operatorii de creștere și decrementare, preluați din limbajul C, ne permit să reprezentăm mai concis expresii precum $count = $count + 1 , care sunt de obicei destul de comune în programe.

Operatorul de increment (++) este folosit pentru a adăuga unul la valoarea variabilei căreia i se aplică această operație, iar operatorul de decrementare (--) scade unul din valoarea unei astfel de variabile.

Fiecare dintre aceste două operațiuni are două soiuri - sufix(în această formă, semnul operației este plasat imediat după variabila căreia i se aplică operația) și prefix(în această formă, semnul operației este plasat imediat înaintea variabilei căreia i se aplică operația). Ambele variante au același efect secundar de modificare a valorii unei variabile, dar operatorii de sufix și prefix returnează valori diferite atunci când sunt utilizați ca expresii. Operatorul sufix funcționează în așa fel încât valoarea variabilei se modifică după ce valoarea expresiei este returnată, iar operatorul prefix funcționează astfel încât valoarea este mai întâi modificată, iar apoi noua valoare este returnată variabilei . Această diferență poate fi găsită folosind operatorii de decrementare și de creștere din operatorii de atribuire:

Cod PHP $număr = 0; $rezultat = $număr++; echo "Rezultatul incrementului $count++: ".$rezultat."
"; $număr = 0; $rezultat = ++$număr; echo "Rezultatul creșterii ++$număr: ".$rezultat."
";

Declarațiile de mai sus generează următoarea ieșire în fereastra browserului:

Operații de creștere

În acest exemplu, instrucțiunea $result = $count++ este complet echivalentă cu instrucțiunile:

Cod PHP $rezultat = $număr; $număr = $număr + 1;

Împreună cu aceasta, operatorul $result = ++$count este echivalent cu următorii operatori:

Cod PHP $număr = $număr +1; $rezultat = $număr;

Operațiuni de atribuire

Operațiile de creștere (și decrementare) reduc cantitatea de cod necesară pentru a adăuga unul la valoarea unei variabile, dar nu reduc cantitatea de cod care atribuie valoarea variabilei unui alt număr sau altor operații aritmetice. Din fericire, toți cei cinci operatori aritmetici au operatori de atribuire corespunzători (+=, -=, *=, /= și %=) care vă permit să atribuiți unei variabile într-o expresie scurtă rezultatul efectuării unei operații aritmetice pe valoarea lui această variabilă. De exemplu, operatorul

Cod PHP $count = $count * 3;

poate fi prescurtat ca

Cod PHP $count *= 3;

Funcții matematice simple

Următoarea etapă în complexitatea programului în comparație cu cea în care se folosesc doar operații aritmetice este utilizarea tot felul de funcții. Funcțiile vă permit să efectuați sarcini precum conversia de la un tip numeric la altul (consultați Tipuri de date) și găsirea numărului minim sau maxim într-un set de numere. Următorul tabel oferă funcții matematice simple:

Funcții matematice simple PHP
Funcţie Descriere
podea() Preia un singur parametru real (de obicei un număr în virgulă mobilă cu precizie dublă) și returnează cel mai mare număr întreg mai mic sau egal cu acel parametru real (rotunjire în jos)
plafon() Numele acestei funcții este prescurtarea pentru plafon. Funcția preia un singur parametru real (de obicei un număr în virgulă mobilă cu precizie dublă) și returnează cel mai mic număr întreg mai mare sau egal cu acel parametru real (rotunjit în sus)
rundă() Preia un singur parametru real (de obicei un număr în virgulă mobilă cu precizie dublă) și returnează cel mai apropiat număr întreg
abs() Valoarea absolută a unui număr. Dacă parametrul real numeric unic are o valoare negativă, atunci funcția returnează numărul pozitiv corespunzător; dacă parametrul real este pozitiv, atunci funcția returnează parametrul real în sine
min() Acceptă orice număr de parametri reali numerici (dar cel puțin unul) și returnează cea mai mică dintre toate valorile parametrilor actuali
max() Acceptă orice număr de parametri reali numerici (dar cel puțin unul) și returnează cea mai mare dintre toate valorile parametrilor actuali

De exemplu, rezultatul următoarei expresii este 3, deoarece valoarea fiecărei expresii cu un apel de funcție este, de asemenea, 3:

Cod PHP $rezultat = min(3, abs(-3), max(round(2.7), ceil(2.3), floor(3.9)));

Generarea numerelor aleatorii

PHP folosește două generatoare de numere aleatoare (numite respectiv de funcții rand()și mt_rand()). Cu fiecare dintre aceste generatoare sunt asociate trei funcții cu același scop: funcția de setare a valorii inițiale ( srand()și mt_srand()), funcția de numere aleatoare în sine și funcția care selectează cel mai mare număr întreg care poate fi returnat de generator (( getrandmax()și mt_getrandmax())). Funcțiile getrandmax() și mt_getrandmax() returnează cel mai mare număr care poate fi returnat de funcția rand() sau mt_rand(), pe platformele Windows această valoare este limitată la 32768.

Alegerea unei anumite funcții de generare a numerelor pseudo-aleatoare, care este utilizată în funcția rand(), poate depinde de bibliotecile cu care a fost compilat interpretul PHP. În schimb, generatorul mt_rand() folosește întotdeauna aceeași funcție de generare a numerelor pseudoaleatoare (mt este prescurtarea pentru Mersenne Twister), iar autorul documentației online pentru funcția mt_rand() susține că această funcție este, de asemenea, mai rapidă și „mai mult”. aleatoriu" (din punct de vedere al criptografiei) decât rand(). Nu avem niciun motiv să ne îndoim de adevărul acestor afirmații, așa că preferăm să folosim funcția mt_rand() mai degrabă decât rand().

Când utilizați unele versiuni de PHP pentru unele platforme, funcțiile rand() și mt_rand() par să genereze numere aleatoare aparent perfect acceptabile, chiar și fără a specifica mai întâi o valoare de bază. Dar nu trebuie să avem încredere într-o astfel de impresie. În primul rând, programele care utilizează funcții de generare a numerelor aleatoare fără a specifica o valoare inițială nu pot fi portate cu ușurință pe alte platforme, iar în al doilea rând, funcționarea fiabilă a acestor funcții fără a specifica o valoare inițială nu este garantată.

O modalitate obișnuită de a seta o sămânță pentru oricare dintre generatoarele de numere aleatoare PHP (folosind funcția mt_srand() sau srand()) este următoarea:

Cod PHP mt_srand((dublu)microtime()*1000000);

Această instrucțiune setează valoarea inițială a generatorului la numărul de microsecunde care au trecut până acum de la ultima secundă întreagă. (Trata de dublare în această declarație este într-adevăr necesară, deoarece funcția microtime() returnează un șir, care este tratat ca un întreg în operația de înmulțire, dar nu în operația de trecere a parametrilor.) Cititorul este încurajat să introducă valoarea specificată. operator de inițializare, chiar dacă nu prea înțelege scopul acestui operator; este suficient să puneți pur și simplu această instrucțiune pe fiecare pagină PHP, o singură dată, înainte de a utiliza funcția corespunzătoare mt_rand() sau rand() și această declarație va asigura că punctul de plecare se schimbă și, prin urmare, este generată o secvență aleatorie diferită de fiecare dată.

Această metodă specială de însămânțare a fost gândită profund de cei care înțeleg pe deplin dezavantajele generării de numere pseudoaleatoare și probabil va fi pentru totdeauna superioară încercării oricărui programator individual de a face ceva mai „delicat”.

Evident, aceste funcții de generare a numerelor pseudoaleatoare returnează numai numere întregi, dar un număr întreg aleatoriu dintr-un interval dat poate fi ușor convertit într-un număr în virgulă mobilă corespunzător (să zicem, un număr între 0,0 și 1,0 inclusiv) folosind o expresie precum rand() / getrandmax(). După aceea, intervalul specificat poate fi scalat și deplasat după cum este necesar. Un exemplu este prezentat mai jos:

Cod PHP // Să presupunem că trebuie să generăm un număr aleatoriu între 100.0 și 120.0 $random = 100.0 + 20.0 * mt_rand() / mt_getrandmax(); eco $aleatoriu."
"; // Generați numere întregi (100 - 120); echo round($aleatoriu);

Încercați să reîmprospătați pagina cu acest cod de mai multe ori pentru a vă asigura că sunt generate numere aleatorii.

Constante matematice

În PHP versiunea 4.0, a existat o singură constantă matematică, descrisă în documentație - M_PI (valoarea numărului pi, reprezentată ca un număr în virgulă mobilă cu dublă precizie). Și începând cu PHP 4.0.2, au fost introduse multe constante noi. Cele mai multe dintre aceste noi constante se referă la numărul pi (sau multiplii acestuia), numărul e (sau multiplii lui) și rădăcinile pătrate; în plus, unele constante erau de alte tipuri. Dar, în versiunile ulterioare, din mai multe motive, lista de constante a fost din nou redusă la un număr relativ mic de constante matematice predefinite:

Constante matematice PHP
Constant Descriere
M_PI π
M_PI_2 π / 2
M_PI_4 π / 4
M_1_PI 1/π
M_2_PI 2/π
M_2_SQRTPI 2 / sqrt(π)
PE MINE e
M_SQRT2 pătrat(2)
M_SQRT1_2 1 / pătrat(2)
M_LOG2E log2(e)
M_LOG10E jurnal(e)
M_LN2 loge(2)
M_LN10 loge(10)

Verificarea formatului numărului

Limbajul PHP oferă o serie de funcții care vă permit să verificați reprezentarea corectă a numerelor. Deși PHP nu are o tastare puternică, este recomandat să utilizați unele dintre aceste verificări în codul dvs. dacă este necesar, astfel încât să puteți prezice caracteristicile rezultatelor pe care le obțineți, precum și să alegeți cel mai bun mod de a le gestiona.

Primul și cel mai simplu test este utilizarea funcției is_numeric(). Ca și în cazul majorității altor astfel de verificări, funcția is_numeric returnează un rezultat boolean, adevărat, dacă argumentul transmis acestuia este o dată numerică de orice tip (cu semn sau fără semn, întreg sau virgulă mobilă) sau o expresie matematică care returnează o valoare numerică validă. .

Cu functii is_int()și is_float Puteți determina dacă un număr este un întreg sau o fracție. Încă două verificări sunt puțin mai complicate: funcțiile este_finit()și este_infinit() vă permit să efectuați exact verificările pe care le indică numele lor (dacă numărul este finit sau infinit). Dar, strict vorbind, intervalul de valori acoperit de aceste funcții nu poate include infinitul real (și chiar se poate verifica dacă un număr are o valoare infinit de mare?). În schimb, sunt utilizate limitele intervalului de valori în virgulă mobilă permise pe sistemul respectiv.

Următorul este un exemplu de utilizare a acestor funcții:

Cod PHP este_numeric(4); // adevărat este_numeric(25 - 6); // true is_numeric("25"); // true is_numeric("25 - 6"); // false is_int(4); // true is_int(4.2); // false is_int("4"); // false - această verificare este mai strictă decât verificarea cu funcția is_numeric() is_float(4); // false is_float(4.0); // adevărat is_float(M_PI); // Adevărat

Conversia sistemului numeric

În mod implicit, PHP folosește baza 10 pentru a converti valorile numerice externe în interne înainte și înapoi. De asemenea, puteți spune interpretului PHP că reprezentarea externă folosește numere octale de bază 8, prefixând numărul cu 0 inițial sau numere hexazecimale specificate în baza 16 (pentru a face acest lucru, trebuie să prefixați numărul cu 0x).

Desigur, după conversia numerelor din reprezentarea externă în cea internă, acestea sunt stocate în memorie în format binar și toate calculele aritmetice și matematice de bază sunt efectuate în sistemul de operare însuși în baza 2. În plus, limbajul PHP oferă o serie de funcții pentru conversia numerelor dintr-un sistem de calcul de bază în altul. O prezentare generală a acestor caracteristici este oferită în tabelul de mai jos:

Funcții de conversie a sistemului de numere
Funcţie Descriere
BinDec() Preia un singur argument șir care este un număr întreg binar (număr în baza 2) și returnează reprezentarea șir a acelui număr în baza 10
DecBin() Similar cu BinDec(), dar se convertește de la baza 10 la baza 2
OctDec() Similar cu BinDec(), dar se convertește de la baza 8 la baza 10
DecOct() Similar cu BinDec(), dar se convertește de la baza 10 la baza 8
HexDec() Similar cu BinDec(), dar convertește de la baza 16 la baza 10
DecHex() Similar cu BinDec(), dar convertește de la baza 10 la baza 16
base_convert() Este nevoie de un parametru șir (reprezentând numărul întreg de convertit) și doi parametri întregi (baza și baza dorită). Returnează un șir care reprezintă numărul convertit. În acest șir, cifrele mai vechi de 9 (de la 10 la 35) sunt reprezentate prin caractere a-z. Atât bazele originale, cât și cele dorite trebuie să fie în intervalul 2-36

Toate funcțiile de conversie a numerelor sunt funcții speciale care convertesc numere de la o bază specifică la alta. Excepția este funcția base_convert(), care acceptă parametri arbitrari cu desemnarea bazei inițiale și rezultate.

Rețineți că toate funcțiile de conversie a numerelor preiau parametri șir și returnează valori, dar puteți utiliza parametri numerici zecimali și vă puteți baza pe interpretul PHP pentru a face corect conversia tipului. Cu alte cuvinte, ambele apeluri DecBin("1234") și DecBin(1234) produc același rezultat.

Exponenți și logaritmi

Limbajul PHP include funcții standard exponențiale și logaritmice a două soiuri - pentru a lucra în baza 10 și baza e (care sunt prezentate în tabel).

PHP furnizează funcția exp() pentru a ridica numărul e la puterea specificată, dar nu există nicio funcție cu un parametru care să poată ridica puterea lui 10 la puterea specificată. Cu toate acestea, puteți utiliza funcția pow() cu doi parametri în schimb, dând 10 ca prim parametru.

Puteți verifica dacă funcțiile exponențiale și logaritmice cu aceeași bază sunt inverse între ele verificând identitatea rezultatelor obținute în acest fel:

Cod PHP $test_449 = 449,0; $test_449 = pow(10, exp(log(log10($test_449)))); echo "test_449 = $test_449"; // test_449 = 449

Funcții trigonometrice

Limbajul PHP oferă un set standard de funcții trigonometrice de bază, informații generale despre care sunt date în tabel:

Funcții trigonometrice
Funcţie Descriere
pi() Nu ia parametri și returnează o valoare aproximativă de π (3,1415926535898). Poate fi folosit interschimbabil cu constanta M_PI
păcat() Acceptă un parametru numeric în radiani și returnează sinusul parametrului ca număr cu virgulă mobilă cu precizie dublă
cos() Preia un parametru numeric în radiani și returnează cosinusul parametrului ca număr cu virgulă mobilă cu precizie dublă
bronzat() Acceptă un parametru numeric în radiani și returnează tangenta parametrului ca număr cu virgulă mobilă cu precizie dublă
ca în() Preia un parametru numeric și returnează arcsinusul parametrului în radiani. Intrarea trebuie să fie între -1 și 1 (dacă funcția primește intrare în afara acestui interval, va produce un rezultat NAN). Rezultatele variază de la -π/2 la π/2
acos() Preia un parametru numeric și returnează arcul cosinus al parametrului în radiani. Intrarea trebuie să fie între -1 și 1 (dacă funcția primește intrare în afara acestui interval, va produce un rezultat NAN. Rezultatele sunt între 0 și π
un bronz() Acceptă un parametru numeric și returnează arc-tangente a parametrului în radiani. Rezultatele variază de la -π/2 la π/2

Mai jos este un exemplu de compilare a unui tabel pentru calcularea funcțiilor trigonometrice pentru unghiuri „standard”:

Cod PHP funcția display_trigonometry($func_array, $input_array) ( // Ecou antet funcție " ";) ecou""; // Afișează restul tabelului foreach($input_array ca $input) ( echo " "; foreach($func_array ca $func) ( echo " ";) ecou"";) ecou"
Semnificație/funcție$func
".sprintf("%.4f",$input).""; printf("%4.4f", $func($input)); echo "
"; ) display_trigonometrie(array("sin", "cos", "tan"), array(0, M_PI / 6, M_PI / 3, M_PI / 2, M_PI));

Un exemplu de utilizare a funcțiilor trigonometrice în PHP

Obținerea unor valori tangente foarte mari (dar nu infinite) se datorează faptului că, teoretic, numitorii ar trebui să fie egali cu zero, dar în realitate diferă ușor de zero din cauza erorilor de rotunjire.

Calcul de precizie arbitrară (folosind funcții BC)

Tipurile cu virgulă mobilă întregi și cu precizie dublă sunt bune pentru majoritatea problemelor de matematică care apar în scripturile web, dar există o cantitate fixă ​​de memorie de computer pentru a stoca fiecare instanță a unei valori reprezentate cu aceste tipuri, astfel încât dimensiunea și precizia reprezentarea numerelor aceste tipuri impun inevitabil restricții.

Desigur, intervalele exacte ale acestor tipuri de date pot depinde de arhitectura computerului server, dar valorile întregi pot varia de obicei de la -2 31 -1 la 2 31 -1, iar numerele cu virgulă mobilă cu precizie dublă pot reprezenta numere cu o precizie de aproximativ 13 până la 14 cifre zecimale. Pe de altă parte, pentru sarcinile care necesită o gamă mai largă de reprezentare sau o precizie mai mare, PHP oferă funcţii matematice cu precizie arbitrară(numite și funcții BC, după o utilitate de calcul cu precizie arbitrară bazată pe facilitățile sistemului Unix).

Funcțiile de precizie arbitrară pot să nu fie incluse în compilarea interpretului PHP, mai ales dacă utilizatorul a făcut el însuși o astfel de compilare, deoarece pentru aceasta utilizatorul ar fi trebuit să știe că în etapa de configurare, flag-ul trebuie inclus în parametri. --enable-bcmath. Pentru a verifica dacă aveți acces la funcțiile specificate, încercați să evaluați expresia bcadd("1","1"). Dacă primiți un mesaj de eroare care spune o funcție nedefinită, va trebui să modificați din nou configurația și să recompilați interpretul PHP.

Funcțiile BC nu folosesc tipuri numerice cu lungime fixă ​​ca parametri și valori returnate, ci șiruri. Deoarece șirurile din PHP sunt limitate doar de memoria disponibilă, numerele utilizate în calcule pot fi de orice lungime. Calculele fundamentale se fac sub formă zecimală și, în multe privințe, seamănă cu cele pe care o persoană le poate efectua cu creion și hârtie (dacă poate acționa foarte repede și are răbdare). Funcțiile BC care operează pe numere întregi sunt precise și vă permit să utilizați câte cifre aveți nevoie, în timp ce funcțiile care operează pe numere în virgulă mobilă efectuează calcule la numărul specificat de zecimale. O prezentare generală a funcțiilor BC este dată în tabelul de mai jos:

Funcții matematice cu precizie arbitrară (funcții BC)
Funcţie Descriere
bcadd() Preia doi parametri șir reprezentând numere și un parametru opțional întreg cu un indicator de factor de scară. Returnează suma primilor doi parametri sub formă de șir, cu numărul de zecimale din rezultat specificat de parametrul factor de scară. Dacă parametrul cu desemnarea factorului de scară nu este specificat, atunci este utilizat factorul de scară implicit.
bcsub() Similar cu bcadd(), cu excepția faptului că returnează rezultatul scăderii celui de-al doilea parametru din primul
bcmui() Similar cu bcadd(), cu excepția faptului că returnează rezultatul înmulțirii parametrilor săi
bcdiv() Similar cu bcadd(), cu excepția faptului că returnează rezultatul împărțirii primului argument la al doilea.
bcmod() Returnează modulul (restul) de la împărțirea primului parametru la al doilea. Deoarece valoarea returnată este de tip întreg, funcția nu acceptă un parametru cu o notație a factorului de scară
bcpow() Ridică primul parametru la puterea specificată de al doilea parametru. Numărul de zecimale din rezultat este determinat de factorul de scară, dacă este dat unul.
bcsqrt() Returnează rădăcina pătrată a parametrului cu numărul de zecimale determinat de valoarea factorului de scară opțional
bcscale() Setează factorul de scară implicit pentru apelurile ulterioare la funcția BC

Majoritatea acestor funcții iau ca ultim parametru un factor de scară opțional (întreg) care specifică câte poziții zecimale ar trebui să aibă rezultatul. Dacă nu este specificat un astfel de parametru, atunci factorul de scară implicit este utilizat ca factor de scară, care la rândul său poate fi setat prin apelarea funcției bcscale(). Valoarea implicită pentru această valoare implicită (adică valoarea care este utilizată dacă scriptul nu folosește apelul funcției bcscale()) poate fi setată și în fișierul de inițializare php.ini.

Următorul este un exemplu de utilizare a unei funcții de precizie arbitrară pentru a efectua exact operații aritmetice cu numere întregi. Rularea următorului cod:

Cod PHP pentru ($x = 1; $x< 25; $x++) { echo "$x$x= ".bcpow($x, $x)."
"; }
Calculul precis al mărimilor astronomice folosind funcții BC

Dacă ar fi fost folosit tipul întreg PHP obișnuit pentru aceste calcule, atunci depășirea întregului ar fi avut loc cu mult înainte de sfârșitul calculului, astfel încât restul buclei ar trebui să facă calculele pentru a obține un număr aproximativ în virgulă mobilă.

Prelucrarea formei Arrays 1 2 3 4 5 6 7 8 9 10

Operații cu variabile PHP (instrucțiuni)

Există diferite grupuri pentru implementare.

Un operator este ceva care constă din una sau mai multe valori (expresii în jargonul de programare) care poate fi evaluată ca o nouă valoare (astfel, întregul construct poate fi tratat ca o expresie). Rezultă că funcțiile sau orice alte constructe care returnează o valoare (de exemplu, imprimare()) sunt operatori, spre deosebire de toate celelalte constructe ale limbajului (de exemplu, ecou()) care nu returnează nimic.

Operații aritmetice în PHP

Îți amintești noțiunile de bază ale aritmeticii școlare? Operatorii descriși mai jos funcționează în același mod.

Operatorul de divizare ("/") returnează întotdeauna un tip real, chiar dacă ambele valori au fost numere întregi (sau șiruri de caractere care se convertesc în numere întregi). În caz contrar, rezultatul va fi fracționat.

Operația de calcul a restului împărțirii " % „Funcționează numai cu numere întregi, așa că aplicarea acesteia la numere fracționale poate duce la rezultate nedorite.

Puteți folosi paranteze. Precedența unor operații matematice față de altele și schimbarea priorităților la utilizarea parantezelor în expresii aritmetice corespund regulilor matematice uzuale.

Operatii de crestere si scadere

PHP, ca și C, acceptă operatorii de creștere și decrementare a prefixului și postfixului.

Operatori de creștere și decrementare Postfix

Ca și în C, acești operatori cresc sau decrementează valoarea unei variabile și returnează valoarea variabilei într-o expresie. $aînainte de schimbare. De exemplu:

$a=10;
$b=$a++;
echo "a=$a, b=$b"; // Iese a=11, b=10

După cum puteți vedea, mai întâi variabila $b a atribuit o valoare unei variabile $a, iar abia atunci acesta din urmă a fost incrementat. Cu toate acestea, o expresie a cărei valoare este atribuită unei variabile $b, poate fi mai dificil - în orice caz, creșterea $a se întâmplă numai după ce a fost calculat.

Operatori de creștere și decrementare prefix

Există, de asemenea, operatori de creștere și decrementare, care sunt specificați mai degrabă decât după numele variabilei. În consecință, ei returnează valoarea variabilei după modificare. Exemplu:

$a=10;
$b=--$a;
echo "a=$a, b=$b"; // Iese a=9, b=9

Operațiile de creștere și decreștere sunt folosite foarte des în practică. De exemplu, ele apar în aproape orice ciclu pentru .

ecou "

Creștere postfix

" ;
$a = 5 ;
echo "Ar trebui să fie 5: " . $a++ . "
\n" ;

\n" ;

ecou "

increment de prefix

" ;
$a = 5 ;
echo "Ar trebui să fie 6: " . ++ $a . "
\n" ;
echo "Ar trebui să fie 6: " . $a . "
\n" ;

ecou "

Scădere postfix

" ;
$a = 5 ;
echo "Ar trebui să fie 5: " . $a -- . "
\n" ;

\n" ;

ecou "

decrementarea prefixului

" ;
$a = 5 ;
echo "Ar trebui să fie 4: " . -- $a. "
\n" ;
echo "Ar trebui să fie 4: " . $a . "
\n" ;
?>

Operații cu șiruri

PHP are doi operatori pentru lucrul cu șiruri. Primul este operatorul de concatenare (""."), care returnează concatenarea argumentelor stânga și dreapta. Al doilea este operatorul de atribuire a concatenării, care adaugă argumentul din dreapta celui din stânga. Să luăm un exemplu concret:

$a = "bună ziua" ;
$b = $a . "Lume!" ; // $b conține șirul „Hello World!”

$a = "bună ziua" ;
$a .= "Lumea!" ; // $a conține șirul „Hello World!”
?>

Operații pe biți

Aceste operații sunt pentru operarea (setarea/ștergerea/verificarea) grupuri de biți într-o variabilă întreagă. Biții unui număr întreg nu sunt altceva decât cifre individuale ale aceluiași număr scrise în binar. De exemplu, în binar, numărul 12 ar arăta ca 1100 și 2 ar arăta ca 10, deci expresia 12|2 ne va returna numărul 14 (1110 în notație binară). Dacă variabila nu este un număr întreg, atunci aceasta
runda următoare este rotunjită în sus și apoi îi sunt aplicați următorii operatori.

32 de biți sunt folosiți pentru a reprezenta un singur număr:

  • 0000 0000 0000 0000 0000 0000 0000 0000 este zero;
  • 0000 0000 0000 0000 0000 0000 0000 0001 este 1;
  • 0000 0000 0000 0000 0000 0000 0000 0010 este 2;
  • 0000 0000 0000 0000 0000 0000 0000 0011 este 3;
  • 0000 0000 0000 0000 0000 0000 0000 0100 este 4;
  • 0000 0000 0000 0000 0000 0000 0000 0101 este 5;
  • 0000 0000 0000 0000 0000 0000 0000 1111 este 15;

Operatori pe biți:

Exemplu Nume Rezultat
$a și $b Pe biți „și” Sunt setati doar acei biti care sunt setati atat in $a cat si in $b.
$a | $b Pe biți „sau” Acei biți care sunt setați fie în $a, fie în $b sunt setați.
$a ^ $b exclusiv sau Sunt setati doar bitii setati fie in $a, fie numai in $b.
~$a Negare Biții care nu sunt setați în $a sunt setați și invers.
$a<< $b Schimbați la stânga Toți biții din $a sunt mutați în pozițiile $b spre stânga (fiecare poziție înseamnă „înmulțire cu 2”)
$a >> $b schimba la dreapta Toți biții variabilei $a sunt deplasați în pozițiile $b la dreapta (fiecare poziție implică „împărțire la 2”)

Operatii de comparatie

Operatorii de comparație, după cum sugerează și numele lor, vă permit să comparați două valori între ele.

Acestea sunt operațiuni unice în felul lor, deoarece, indiferent de tipurile de argumente, ele returnează întotdeauna unul dintre cele două lucruri: fals sau Adevărat. Operațiile de comparare vă permit să comparați două valori între ele și, dacă condiția este îndeplinită, să reveniți Adevărat, și dacă nu - fals.

În PHP, doar variabilele scalare pot fi comparate. Matricele și obiectele nu pot fi comparate în PHP. Nici măcar nu pot fi comparate pentru egalitate (folosind operatorul ==), dar PHP nu emite un avertisment când face acest lucru. Așa că odată mă întrebam de ce două matrice complet diferite când le comparăm cu == sunt dintr-o dată la fel, amintiți-vă că înainte de a compara ambii operanzi sunt convertiți într-un cuvânt matrice, care apoi este comparat.

Consultați Comparația matricei pentru detalii.

Operatori de comparare:

Exemplu Nume Rezultat
$a == $b Egal ADEVĂRAT dacă $a este egal cu $b.
$a === $b La fel de egal ADEVĂRAT dacă $a este egal cu $b și are același tip. (Adăugat în PHP 4)
$a != $b Nu este egal ADEVĂRAT dacă $a nu este egal cu $b.
$a<>$b Nu este egal ADEVĂRAT dacă $a nu este egal cu $b.
$a !== $b Identic nu egal ADEVĂRAT dacă $a nu este egal cu $b sau dacă sunt de diferite tipuri (Adăugat în PHP 4)
$a< $b Mai puțin ADEVĂRAT dacă $a este strict mai mic decât $b.
$a > $b Mai mult ADEVĂRAT dacă $a este strict mai mare decât $b.
$a<= $b Mai puțin sau egal ADEVĂRAT dacă $a este mai mic sau egal cu $b.
$a >= $b Mai mult sau egal ADEVĂRAT dacă $a este mai mare sau egal cu $b.

Operații booleene

Operatorii logici sunt proiectați exclusiv pentru a lucra cu expresii logice și, de asemenea, returnează fals sau Adevărat.

Iată un tabel cu operatori logici PHP:

Trebuie remarcat faptul că evaluarea expresiilor logice care conțin astfel de operatori merge întotdeauna de la stânga la dreapta și dacă rezultatul este deja evident (de exemplu, fals&&ceva dă mereu fals), atunci calculele sunt terminate, chiar dacă există apeluri de funcție în expresie. De exemplu, în instrucțiunea $logic = 0&&(time()>100); functie standard timp() nu va fi chemat niciodată.

Fiți atenți la operațiile logice - nu uitați de dublarea caracterului. Rețineți că, de exemplu, | și || - doi operatori complet diferiți, dintre care unul poate returna orice număr, iar al doilea - numai falsși Adevărat.

Operatorii de creștere (++) și de decrementare (--) nu funcționează pe variabilele booleene.

Operatori de echivalență

În PHP, din PHP4 există un operator de comparație identic - un semn de egalitate triplu === ,
sau operatorul de check-on. PHP este destul de tolerant ca șirurile de caractere să fie implicit convertite în numere și invers.
De exemplu, următorul cod va afișa că valorile variabilelor sunt egale:

$a=10;
$b="10";

Și asta în ciuda faptului că variabila $a este un număr și $b- linie. Acum să ne uităm la un exemplu ușor diferit:

$a=0; // zero
$b=""; // linie goală
if($a==$b) echo "a și b sunt egale"; // Afișează „a și b sunt egali”

Cu toate că $ași $bîn mod clar nu sunt egale nici în sensul obișnuit al cuvântului, scenariul va declara că sunt la fel. De ce se întâmplă asta? Faptul este că, dacă unul dintre operanzii unui operator logic poate fi tratat ca număr, atunci ambii operanzi sunt tratați ca numere. Acest lucru transformă șirul gol în 0 , care este apoi comparat cu zero. Nu este de mirare că operatorul ecou lucrări.
Problema este rezolvată de operatorul de echivalență === (egalitate triplă). Nu numai că compară două expresii, ci și tipurile lor. Să rescriem exemplul nostru folosind acest operator.

Ultima actualizare: 1.11.2015

În PHP, putem folosi diverși operatori: aritmetici, logici etc. Să ne uităm la fiecare tip de operație.

Operatii aritmetice

    + (operație de adăugare)

    De exemplu $a + 5

    - (operație de scădere)

    De exemplu $a - 5

    * (înmulțire)

    De exemplu $a * 5

    / (Divizia)

    De exemplu $a / 5

    % (restul diviziunii)

    De exemplu: $a=12; echo $a % 5; // este egal cu 2

    ++ (creștere/creștere valoarea cu unu)

    De exemplu, ++$a

    Este important să înțelegeți diferența dintre expresiile ++$a și $a++ . De exemplu:

    $a=12; $b=++$a; // $b este egal cu 13 echo $b;

    Aici, mai întâi, se adaugă unul la valoarea variabilei $a, iar apoi valoarea acesteia este egalată cu variabila $b. Altfel ar fi dacă expresia ar arăta astfel: $b=$a++; . Aici, mai întâi, valoarea variabilei $a a fost egală cu variabila $b, iar apoi valoarea variabilei $a a fost incrementată.

    -- (reduceți/reduceți valoarea cu unu)

    De exemplu, --$a . Și la fel ca în cazul incrementului, există două tipuri de notație: --$a și $a--

Operațiuni de atribuire

    Setează o variabilă la o anumită valoare: $a = 5

    Adăugarea urmată de atribuirea rezultatului. De exemplu: $a=12; $a += 5; eco $a; // este egal cu 17

    Scăderea urmată de atribuirea rezultatului. De exemplu: $a=12; $a -= 5; eco $a; // este egal cu 7

    Înmulțirea urmată de atribuirea rezultatului: $a=12; $a *= 5; eco $a; // este egal cu 60

    Împărțirea urmată de atribuirea rezultatului: $a=12; $a /= 5; eco $a; // este egal cu 2,4

    Concatenarea șirurilor de caractere cu atribuirea rezultatului. Se aplică la două linii. Dacă variabilele nu stochează șiruri, ci, de exemplu, numere, atunci valorile lor sunt convertite în șiruri și apoi se efectuează operația: $a=12; $a .= 5; eco $a; // este egal cu 125 // identic cu $b="12"; $b .="5"; // este egal cu 125

    Obținerea restului unei diviziuni și apoi atribuirea rezultatului: $a=12; $a %= 5; eco $a; // este egal cu 2

Operatii de comparatie

Operațiile de comparație, de regulă, sunt utilizate în construcțiile condiționate, atunci când este necesară compararea a două valori și, în funcție de rezultatul comparației, efectuarea unor acțiuni. Următoarele operațiuni de comparare sunt disponibile.

    Operatorul de egalitate compară două valori, iar dacă sunt egale, returnează adevărat, în caz contrar returnează fals: $a == 5

    Operatorul de identitate compară și două valori, iar dacă sunt egale returnează adevărat, în caz contrar returnează false: $a === 5

    Compară două valori și returnează adevărat dacă nu sunt egale, în caz contrar returnează false: $a != 5

    Compară două valori și, dacă nu sunt egale, returnează adevărat, în caz contrar returnează false: $a !== 5

    Compară două valori, iar dacă prima este mai mare decât a doua, returnează adevărat, în caz contrar returnează false: $a > 5

    Compară două valori, iar dacă prima este mai mică decât a doua, returnează adevărat, în caz contrar returnează false: $a< 5

    Compară două valori, iar dacă prima este mai mare sau egală cu a doua, returnează adevărat, în caz contrar returnează false: $a >= 5

    Compară două valori, iar dacă prima este mai mică sau egală cu a doua, returnează adevărat, în caz contrar returnează false: $a<= 5

Operator de egalitate și identitate

Ambii operatori compară două expresii și returnează adevărat dacă expresiile sunt egale. Dar există diferențe între ele. Dacă în operațiunea de egalitate sunt luate două valori de diferite tipuri, atunci acestea sunt reduse la una - cea pe care interpretul o consideră optimă. De exemplu:

Evident, variabilele stochează valori diferite de diferite tipuri. Dar când sunt comparate, acestea vor fi reduse la același tip - numeric. Și variabila $a va fi turnată la numărul 22. Și, ca rezultat, ambele variabile vor fi egale.

Sau, de exemplu, următoarele variabile vor fi, de asemenea, egale:

$a = fals; $b = 0;

Pentru a evita astfel de situații, se utilizează operația de echivalență, care ia în considerare nu numai valoarea, ci și tipul variabilei:

$a = "22a"; $b = 22; if($a===$b) echo "egal"; else ecou "nu este egal";

Acum variabilele nu vor fi egale.

Operatorii de inegalitate != și !== funcționează în mod similar.

Operații booleene

Operațiile booleene sunt de obicei folosite pentru a combina rezultatele a două operații de comparare. De exemplu, trebuie să efectuăm o anumită acțiune dacă mai multe condiții sunt adevărate. Sunt disponibile următoarele operații logice:

    Returnează adevărat dacă ambele operații de comparare returnează adevărat, în caz contrar returnează false: $a == 5 && $b = 6

    Similar cu && : $a == 5 și $b > 6

    Returnează adevărat dacă cel puțin o operație de comparare este evaluată la adevărat, în caz contrar returnează false: $a == 5 || $b = 6

    Similar cu operațiunea || : $a< 5 or $b > 6

    Returnează adevărat dacă operația de comparare returnează false: !($a >= 5)

    Returnează adevărat dacă doar una dintre valori este adevărată. Dacă ambele sunt adevărate sau niciunul nu este adevărat, returnează false. De exemplu: $a=12; $b=6; if($a xor $b) echo "true"; else ecou "fals";

    Aici, rezultatul operației logice va fi fals, deoarece ambele variabile au o anumită valoare. Hai sa schimbam codul:

    $a=12; $b=NULL; if($a xor $b) echo "true"; else ecou "fals";

    Aici rezultatul va fi deja adevărat, deoarece valoarea unei variabile nu este setată. Dacă variabila este NULL, atunci în operațiile logice valoarea acesteia va fi considerată falsă

Operații cu biți

Operațiile cu biți sunt efectuate pe biți individuali ai unui număr. Numerele sunt considerate în reprezentare binară, de exemplu, 2 în reprezentare binară este 010, numărul 7 este 111.

    & (înmulțire booleană)

    Înmulțirea se efectuează pe biți, iar dacă ambii operanzi au valori de biți egale cu 1, atunci operația returnează 1, în caz contrar se returnează numărul 0. De exemplu: $a1 = 4; //100 $b1 = 5; //101 echo $a1 & $b1; // este egal cu 4

    Aici, numărul 4 în binar este 100, iar numărul 5 este 101. Înmulțiți numerele bit cu bit și obțineți (1*1, 0*0, 0*1) = 100, adică numărul 4 în zecimală.

    | (adăugare logică)

    Similar înmulțirii logice, operația se efectuează și pe cifre binare, dar acum este returnat unul dacă cel puțin un număr din acest bit are unul. De exemplu: $a1 = 4; //100 $b1 = 5; //101 echo $a1 | $b1; // este egal cu 5

    ~ (negație logică)

    inversează toate cifrele: dacă valoarea unei cifre este 1, atunci aceasta devine zero și invers. $b = 5; ecou ~$b;

    X<

    x>>y - mută numărul x la dreapta cu y cifre. De exemplu, 16>>1 mută numărul 16 (care este 10000 în binar) cu o cifră la dreapta, rezultând 1000 sau 8 în zecimală

Concatenarea șirurilor

Operatorul punct este folosit pentru a concatena șiruri. De exemplu, să unim mai multe rânduri:

$a="Bună,"; $b="lume"; eco $a . $ b . „!”;

Dacă variabilele nu reprezintă șiruri, ci alte tipuri, cum ar fi numere, atunci valorile lor sunt convertite în șiruri și apoi are loc și operația de concatenare a șirurilor.

  • Serghei Savenkov

    un fel de recenzie „rare”... parcă s-ar grăbi undeva