Category Archives: PHP

Cele mai importante noutati in PHP 5.5

Azi am avut timp sa ma joc cu PHP 5.5 si cele mai interesante / importante noutati voi enumera in acest articol.

Generatoare – utilizand cuvantul cheie yield

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
// nu mai avem nevoi de return ;)
function generator($start, $limit) {
    for ($i = $start; $i <= $limit; $i += 1) {
        yield $i;
    }
}
 
// se va afisa 1 2 3 4 5
foreach (generator(1,5) as $nr) {
    echo $nr . ' ';
}
?>

Foreach suporta liste

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
$my_array = array ( 
  array(1, 'ion'),
  array(2, 'maria')
);
 
// se va afisa 
// ion 1
// maria 2
foreach ($my_array as list($id, $name)) {
    echo $name . ' ' . $id;
}
?>

“Dereferentiere” pentru array si string

1
2
3
4
<?php
 
echo [1, 2, 3][0]; // se va afisa 1
?>
1
2
3
4
5
<?php
 
echo 'PHP'[0]; // se va afisa P
 
?>

Noutati PHP-GD Graphics Library

  • imageflip()
  • imagecrop() si imagecropauto()
  • imagecreatefromwebp()si& imagewebp()

Calculează vârsta în PHP

Există foarte multe modalități pentru a obține vârsta într-o variabilă PHP. Pentru a afla vârsta este de ajuns să știm data nașterii.

1
2
3
4
5
6
7
8
9
10
11
<?php
 
define ('DATE_OF_BIRTH', '15-02-1984');  // zz-ll-aaaa
 
$date_of_birth = new DateTime(DATE_OF_BIRTH);
$today = new DateTime(); // for testing purposes
$diff = $today->diff($date_of_birth);
 
printf('%d years', $diff->y);
 
?>

Diferenta intre 2 siruri (array)

Sa presupunem ca aveti 2 array-uri cu nume utilizatori si doriti sa aflati:

  1. toti utilizatorii care se afla in primul array dar nu se afla in al doilea array.
  2. toti utilizatorii care se afla in al doilea array dar nu se afla in primul.

Exemplu:

1
2
3
4
5
6
<?php 
 
$user1_arr = array ('Vasile', 'Ion', 'andrei'); 
$user2_arr = array ('Ion', 'Andrei', 'Maria'); 
 
?>

Rezolvare 1

Se va folosi functia array_diff($arr1, $arr2):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php 
 
$user1_arr = array ('Vasile', 'Ion', 'andrei'); 
$user2_arr = array ('Ion', 'Andrei', 'Maria'); 
 
// Verificam diferentele pornind de la primul array . 
$user1_diff_arr = array_diff($user1_arr, $user2_arr);
 
// Rezultat 
// $user1_diff_arr = array ('Vasile', 'andrei');
// se observa ca in lista de rezultate apare 'andrei' desi nu ar trebui. Ei, array_diff() este case-sensitive, deci daca in primul array apare cu litere mici, in al doilea cu prima litera mare, se va lua in considerare ca si diferenta. 
 
// Pentru a face o diferentiere case-insensitive vom folosi functia array_udiff()
$user1_diff_arr = array_udiff($user1_arr, $user2_arr, 'strcasecmp');
 
// Rezultat
// $user1_diff_arr = array ('Vasile');
 
 
?>

Rezolvare 2

Pentru punctul 2 se va porni de la al doilea array

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php 
 
$user1_arr = array ('Vasile', 'Ion', 'andrei'); 
$user2_arr = array ('Ion', 'Andrei', 'Maria'); 
 
// Verificam diferentele pornind de la primul array . 
$user1_diff_arr = array_diff($user2_arr, $user1_arr);
 
// Rezultat 
// $user1_diff_arr = array ('Andrei', 'Maria');
 
 
// Diferentiere case-insensitive vom folosi functia array_udiff()
$user1_diff_arr = array_udiff($user2_arr, $user1_arr, 'strcasecmp');
 
// Rezultat
// $user1_diff_arr = array ('Maria');
 
 
?>

Daca aveti intrebari puteti lasa un comentariu.

Conectare la baza de date MySQL din PHP

Pentru a se conecta la baza de date MySQL din PHP se vor folosi urmatoarele functii din PHP:

mysql_connect($nume_server, $utilizator, $parola);

Parametrii

  • $nume_server este numele sau ip-ul serverului de MySQL ( ex: localhost, 127.0.0.1, 87.12.34.125 )
  • $utilizator este numele de utilizator cu care dorim sa ne conectam la baza de date
  • $parola este codul de access pentru utilizator de mai sus

Aceasta functie doar se conecteaza, vizual nu se va vedea nimic

mysql_select_db($nume_baza_de_date, $con);

Parametrii

  • $nume_baza_de_date este numele bazei de date la care dorim sa ne conectam
  • $con este handlerul de conexiune, este rezultatul functiei mysql_connect()

Aceasta functie doar selecteaza baza de date mentionata, vizual nu se va vedea nimic

mysql_close($con);

Aceasta functie PHP inchide conexiunea cu baza de date.

Exemplu

Dorim sa ne conectam la baza de date locala avand ip-ul 127.0.0.1 la baza de date numita wordpress, utilizatorul alex si parola 123456

1
2
3
4
5
6
7
8
9
10
11
<?php
$con = mysql_connect("127.0.0.1","alex","123456"); // salvam conexiunea in variabila $con
if (!$con)
  {
  die('Nu este posibila conectarea la baza de date din urmatoarele motive: ' . mysql_error());
  }
 
mysql_select_db("wordpress", $con); // selectam baza de date wordpress
 
mysql_close($con);  // inchidem conexiunea
?>

Tutorial JSON PHP

In aceste momente vom juca cu transformari JSON in PHP. JSON este o colectie de obiecte . In PHP putem transforma un array in JSON si vice-versa sa transformam un obiect JSON in array .

Fie un array in php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
$job_arr = array (
  array (
    'title' => 'Programator PHP',
    'description' => 'Descriere post Programator PHP'
  ),
  array (
    'title' => 'Programator JS',
    'description' => 'Descriere post Programator JS'
  ),
  array (
    'title' => 'Programator .NET',
    'description' => 'Descriere post Programator NET'
  )
);

Transformam array-ul din PHP in JSON folosind functia json_encode($param_arr):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
  // initializam variabila $job_arr;
 
  $job_json = json_encode($job_arr); // transformam in JSON si salvam in $job_json. Rezultatul va fi de tip string
 
  echo $job_json;  // afisam JSON-ul.
 
  // pentru a decoda  
  $job_arr = json_decode($job_json);  // am transformat JSON-ul in array 
 
  // afisam continutul array-ului $job_arr
 
  print_r($job_arr); 
?>

JSON-ul este folosit pentru comunicare cu JAVASCRIPT. De exemplu avem un request AJAX si rezultatul actiunii ( cod PHP ) va fi un JSON. Acest obiect se va parsa in Javascript si se va trata dupa cerinte.

Tips and Tricks

Cea mai simpla modalitate de a parsa un JSON este utilizarea librariei JQuery. Aici se poate proceda in felul urmator:

1
var my_obj = jQuery.parseJSON(json_varible);

SWITCH in PHP

Switch in PHP inseamna mai multe IF-uri, bineinteles intr-un mod mai structurat si usor de urmarit. Orice instructie SWITCH se poate rescrie cu n IF-uri. Dar hai sa vedem mai exact studiind urmatoarele exemple.

“Sa se verifice daca valoarea variabilei $nume face parte din urmatorele: Andrei, Vlad, Ioana, Andra”. Daca da atunci sa se afiseze numele

Rezolvare 1: Folosim varianta clasica cu IF-uri.

1
2
3
4
5
6
7
8
9
10
11
<?php
  $nume = 'Andrei';
  if ( $nume == 'Andrei' ) 
    echo $nume;
  if ( $nume == 'Vlad' ) 
    echo $nume;
  if ( $nume == 'Ioana' ) 
    echo $nume;
  if ( $nume == 'Andra' ) 
    echo $nume;
?>

Rezolvare 2: Folosim SWITCH.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
  $nume = 'Andrei';
  switch ( $nume ) {
    case 'Andrei':
      echo $nume;
    break;
    case 'Vlad':
      echo $nume;
    break;
    case 'Ioana':
      echo $nume;
    break;
    case 'Andra':
      echo $nume;
    break;
  }
?>

Rezolvare 3: Folosim SWITCH cu toate cazurile intr-un singur loc. Putem aplica aceasta metoda pentru ca se va executa aceeasi instructiune indiferent de valoarea variabilei.

1
2
3
4
5
6
7
8
9
10
<?php
  $nume = 'Andrei';
  switch ( $nume ) {
    case 'Andrei':
    case 'Vlad':
    case 'Ioana':
    case 'Andra':
      echo $nume;
  }
?>

Exemplele anterioare au scop didactic. Eu as rezolva aceasta problema folosind IF + functia in_array() .

1
2
3
4
5
<?php
  $nume = 'Andrei';
  if ( in_array ($nume, array('Andrei', 'Vlad', 'Ioana', 'Andra')) )
      echo $nume;
?>

Afisare data curenta in PHP

Afisarea datei curente in PHP este foarte simpla, se va folosi functia date().

Exemple:

1
2
3
4
5
<?php
 
  echo date("d.m.Y");   // se va afisa de ex: 11.10.2012
 
?>
1
2
3
4
5
<?php
 
  echo date("d-m-Y");   // se va afisa de ex: 11-10-2012
 
?>

Bineinteles se poate schimba si ordinea de afisare.

1
2
3
4
5
<?php
 
  echo date("Y-m-d");   // se va afisa de ex: 2012-10-11
 
?>

If, else, elseif in PHP

De multe ori in orice cod – nu numai in PHP – trebuie avuta in vedere una sau mai multe conditii. Azi vom invata cum se trateaza conditiile in php folosind IF, ELSE si ELSEIF.

Exemplu1: Dorim sa verificam daca doua variabile sunt egale, in caz afirmativ sa se afiseze un mesaj 

1
2
3
4
5
<?php
  $a = 3;
  $b = 3;
  if ($a==$b) echo 'Cele 2 variabile sunt egale';
?>

Exemplu2: Dorim sa afisam daca un numar este pozitiv sau negativ. 

1
2
3
4
5
<?php
  $a = 3;
  if ($a>=0) echo 'numarul este pozitiv';
  else echo 'numarul este negativ';
?>

Exemplu3: Sa se afiseze un mesaj daca numarul este intre 1-4, alt mesaj daca variabila are valoare intre 5-7 si un  al treilea mesaj daca are valoare intre 8-10.

1
2
3
4
5
6
7
8
9
10
<?php
$a = 9;
if ($a >=1 && $a <=4) {
  echo 'variabila este intre 1-4';
}elseif($a >= 5 && $a<=7) {
  echo 'variabila este intre 5-7';
}elseif ($a >=8 && $a <=10) {
  echo 'variabila este intre 8-10';
}
?>

Convertirea unui text intr-un alt set de caractere

Functia iconv() din php este utila cand doresti sa transformi codificarea unui text. Exemplu ai un text codificat ISO-8859-2 si doresti sa transformi in UTF8. Am pregatit un exemplu pentru transformarea/convertirea textului:

Dupa cum ai vazut in exemplu de mai sus, functia iconv() are 3 parametrii:

Ex: iconv(‘ISO-8859-2’, ‘UTF-8’, $text)
===============================================
– ‘ISO-8859-2’: setul de caractere sursa
– ‘UTF-8’: setul de caractere destinatie
– $text: textul sursa avand setul de caractere ‘ISO-8859-2’

Formatarea unui numar in PHP

Sa presupunem ca avem o tabela cu produse avand preturi cu structura diferita, ex: 10 lei, 1.3 lei, 1.12 lei . Cand dorim sa afisam aceste preturi prima data se va afisa fara zecimala, la pretul urmator cu o singura zecimala iar pentru ultimul pret cu 2 zecimale.

Se cere sa se afiseze in php, in mod automat, toate preturile cu 2 zecimale.

Pentru a rezolva aceasta cerinta, vom folosi functia number_format().

Exemplu:

1
2
3
4
5
6
7
8
9
10
<?php 
 
$price = array ( 10, 1.3, 1.12); //definim un sir cu preturi 
for ($i=0;$i<count($price), $i++) { // parcurgem sirul
  echo number_format($price[$i], 2).PHP_EOL;  // afisam pretul cu 2 zecimale, fiecare pret se va afisa pe linie noua.
}
 
 
?>