Pagina informaticii

Teste de informatică pentru liceu, articole C#, C/C++, PHP

Lecţia 2 - Tipuri de date, operatori, tablouri

Pornim de la premisa că utilizatorul care doreşte să înveţe PHP are cunoştinţe elementare de C++. Sintaxa PHP seamănă foarte mult cu C++. Sunt însă şi diferenţe. Una dintre ele este că numele variabilelor este precedat de semnul $, deci $x, $suma, $estePrim sunt nume corecte de variabile. Variabilele în PHP nu trebuie declarate, deci tipul unei variabile este dat de ultima valoare atribuită. Exemplu:

<?php
 $a = 7;
 $mesaj = "Welcome home!";
 echo $a; // afişează 7
 echo $mesaj; // afişează mesajul Welcome home!
?>

Tipurile de date sunt cunoscute de la C++: boolean, întreg, real, şir de caractere. Considerând o variabilă oarecare, valoarea şi tipul acesteia este furnizat cu ajutorul funcţiei var_dump.

<?php
 $a = 7;
 $mesaj = "Welcome home!";
 echo var_dump($a); // afişează int(7), adică tipul şi valoarea
 echo var_dump($mesaj); // afişează string(13) "Welcome home!"
?> 

Constantele şir de caractere poti fi cuprinse între ghilimele sau între apostrofi, ceea ce este foarte util în practică, datorită faptului că în cod PHP se pot plasa tag-uri HTML, inclusiv de exemplu tag-ul <a href="..."></a> care conţine ghilimele. Exemplu:

<?php
 $mesaj1 = "Primul sir";
 $mesaj2 = 'Al doilea sir';
 $mesaj3 = 'I se spunea "Buldozerul"';
 $legatura = 'Apasati <a href="http://www.dponline.ro" target="blank">aici</a>';
 echo $mesaj1; // se afiseaza: Primul sir
 echo $mesaj2; // se afiseaza: Al doilea sir
 echo $mesaj3; // se afiseaza: I se spunea "Buldozerul"
 echo $legatura; // se afiseaza: Apasati aici
?>

Operatorii PHP

PHP lucrează cu următoarele tipuri de operatori:

  • aritmetici: +, -, *, /, %
  • de incrementare/decrementare: ++ şi --
  • de comparaţie: <, >, <=, >=, = =, !=, = = = şi ! = =
  • logici: and, or, xor, &&, ||, !
  • logici pe biţi: &, | , ^, <<, >>
  • pentru şiruri de caractere: .(concatenare)
  • atribuire: =, +=, -=, *=, .= etc.

Operatorii aritmetici sunt asemănători cu cei din C++, doar că nu există operatorul div pentru numere întregi. Aceasta înseamnă că pentru a calcula câtul împărţirii a două numere întregi trebuie efectuată o operaţie de rotunjire. Exemplu: calculul sumei cifrelor unui număr (pentru că deocamdată nu ştim să preluăm date de la tastatură sau dintr-un fişier, vom iniţializa numărul cu o constantă).

<?php
 // calculul sumei cifrelor lui n:
$n = 12345;
$sumaCif = 0;
while ($n > 0)
{
$sumaCif = $sumaCif + ($n % 10);
$n = (int) ($n / 10);
}
echo "Suma cifrelor este : ".$sumaCif; ?>

Rotunjirea lui n am efectuat-o prin operaţia de conversie la tipul int, altfel rezultatul împărţirii ar fi fost un număr real, cu rezultate imprevizibile.

Operatorii de incrementare şi decrementare sunt asemănători ca şi la C++, deci expresii de genul $i++ sau $suma-- sunt corecte.

Operatorii de comparaţie. Pentru compararea expresiilor se utilizează cam aceiaşi operatori ca şi în C++, iar rezultatul unei expresii de forma $a < $b este unul logic (true sau false). Pentru testarea egalităţii, în PHP mai apare pe lângă = = şi operatorul = = =. Operatorul = =, într-o expresie de forma $a = = $b, compară doar valorile conţinute de variabilele a şi b, pe când $a = = = $b compară variabilele atât ca valoare cât şi ca tip. Exemplu:

<?php
 $a = 100; // valoare numerica
 $b = "100"; // sir de caractere
 echo ($a == $b); // afiseaza 1, adica true
 if($a === $b) echo "Egale ca valoare si tip";
else echo "Diferite ca valoare sau tip"; // afiseaza Diferite ca valoare sau tip ?>

Operatorii pentru şiruri de caractere. Operatorul .(punct) este utilizat pentru concatenarea şirurilor, iar .= este atribuirea prin concatenare. Exemplu:

<?php
  // operatorul .
  $sir1 = "Hello";
  $sir2 = "World";
  $s = $sir1 . " " . $sir2 . "!";
  echo $s."<br>";
  
  // operatorul .=
  $text = "Invat PHP ";
  $text .= "cu spor";
  echo $text."<br>";
?>

Operatorii logici. Aceştia au aceeaşi semnificaţie ca şi în C++. Un scurt exemplu de utilizare a operatorului and cu afişarea numerelor naturale de trei cifre care au cifra unităţilor pară şi sunt divizibile cu 17:

<?php
  for ($i = 100; $i <= 999; $i++)
if ( ($i % 2 == 0) and ($i % 17 == 0) )
echo $i." "; ?>

Tablouri în PHP

Tablourile sunt tipuri compuse care, spre deosebire de cele din C++, pot memora date de diverse tipuri. Tablourile, ca şi variabilele simple, nu se declară. Iată un prim exemplu:

<?php
 // initializare
 $t[0] = 45;
 $t[1] = 3;
 $t[2] = 12;
 $t[3] = 5;
 // afisare
 for ($i = 0; $i < 4; $i++)
   echo $t[$i]."<br>";
 
 // tablou initializat cu ajutorul functiei array
 $v = array(34, 55, "doi", "7", true, 66);
for ($i = 0; $i < 6; $i++)
echo $v[$i]." "; // s-au afisat valorile 34 55 doi 7 1 66 // o alta modalitate de utilizare a functiei array; // indexarea vectorului incepe de la 1: $a = array(
1 => "Popescu",
2 => "Ionescu",
3 => "Stoica",
4 => "Vasilache",
5 => "Barbu"
);
echo $a[0]."<br>";// element inexistent!
for ($i = 1; $i <= 5; $i++)
echo $a[$i]." "; ?>

Există funcţia count cu ajutorul căreia se poate determina lungimea unui tablou. Mai jos este un exemplu de utilizare a acestei funcţii:

<?php
 $v = array(34, 55, 5, 6, 1, 75, 9, 7);
echo "Lungimea vectorului este ".count($v)."<br>";
echo "Elementele tabloului : ";
for ($i = 0; $i < count($v); $i++)
echo $v[$i]." "; ?>

În PHP mai este un lucru important. Se pot asocia elementele unui tablou de indicii (cheile) tabloului. Indicii pot fi valori întregi, dar şi şiruri de caractere. Utilitatea acestei variante de construcţie a unui tablou o vom discuta mai pe larg atunci când vom accesa baze de date.

<?php
 $t["vineri"] = 1;
$t["sambata"] = 2;
$t["duminica"] = 3;
echo $t["vineri"]." ".$t["sambata"]." ".$t["duminica"]; ?>

Matricele sunt tablouri bidimensionale. Iniţializarea lor se face după acelaşi principii ca şi tablourile unidimensionale. Iată mai jos două exemple de matrice:

<?php
 // matrice cu 3 linii si 7 coloane:
for ($i = 0; $i < 3; $i++)
for ($j = 0; $j < 7; $j++)
$mat[$i][$j] = ($i + 1) * ($j + 1);
for ($i = 0; $i < 7; $i++)
{
for ($j = 0; $j < 7; $j++)
echo $mat[$i][$j]." ";
echo "<br>";
}

// initializare cu functia array:
$a = array(
1 => array(1, 2, 3, 4, 5, 6),
2 => array(11, 12, 13, 14, 15, 16),
3 => array(21, 22, 23, 24, 25, 26),
4 => array(31, 32, 33, 34, 35, 36),
);
for ($i = 1; $i <= 4; $i++)
{
for ($j = 1; $j <= 4; $j++)
echo $a[$i][$j]." ";
echo "<br>";
} ?>

 

Despre autor
Author

Dan Pracsiu deţinător www.dponline.ro
Profesor, Liceul Teoretic "Emil Racoviță" Vaslui
Membru în Comisia Naţională a Olimpiadelor de Informatică
Pasiuni: istoria, călătoriile, fotografia, muzica clasică

Comentarii (1)
  • Avatar

    Petru Ciucur 13-11-2015 12:1:12

    Foarte interesanta problema calculului sumei cifrelor unui număr. S-a aplicat o solutie matematica cunoscuta. Dar daca nu cunoastem algoritmul pur matematic? Tot trebuie sa dezvoltam un procedeu algoritmic rezolutiv. Al meu este mai mult aritmetic decat matematic :)

    Ceva de genul:

    <?php
    $n = 123456;
    $suma = 0;
    $tablou = str_split($n, 1);
    for($i=0; $i<strlen($n); $i++) {
    $suma += $tablou[$i] ;
    }
    echo $suma;
    ?>

    Se preia variabila numar ca elemente separate, intr-un tablou (array), apoi se face suma elementelor din tablou.

Scrie un comentariu
Nume:

Comentariu:

15 + 10 =