PHP (PHP: Hypertext Preprocessor) este un limbaj slab tipizat. Mai mult, interpretatorul PHP nici nu suportă specificarea tipului la declararea variabilelor. Acest fapt oferă programatorului libertatea de a „jongla” cu tipurile datelor în funcție de necesități, lăsînd pe seama interpretatorului recunoașterea tipului variabilelor. Dar „Libertatea înseamnă răspundere...”[1]. O situație de care m-am „poticnit” recent demostrează acest lucru.
[Ne]cazul cu vectorii
La prima vedere s-ar părea că în PHP vectorii sînt de două feluri: vectori obișnuiți (structuri liniare în memorie) și vectori asociativi (perechi de chei și valori). Fals! În PHP orice vector este vector asociativ ordonat. Acest fapt generează o mulțime de avantaje (flexibilitate și spațiu de manevră limitat doar de fantezia programatorului), dar... cere mai multă atenție, responsabilitate...
Fie un vector, indexat numeric, doar că că construit nu într-o ordine nefirească.
<?php
$a = array();
$a[1] = 'Valoarea1';
$a[2] = 'Valoarea2';
$a[0] = 'Valoarea0';
afiseaza_tablou($a);
?>
Știind că funcția afiseaza_tablou parcurge vectorul și sfișează fiecare element; ce va afișa funcția? Mai exact, mă intereseaza ordinea în care vor fi afișate elemntele.
Răspuns: depinde de tipul structurii repetitive utilizate pentru parcurgerea vectorului. Fară a pierde din generalitate putem evidenția două cazuri:
(1) Este folosită structura for(;;); de exemplu:
<?php
function afisare_tablou($tablou) {
for($i=0; $i<count($tablou); $i++)
echo "a[$i]=$a[$i]\n";
}
?>
Atunci rezultatul afișarii va fi:
a[0]='Valoarea0'
a[1]='Valoarea1'
a[2]='Valoarea2'
(2) Dacă însă este folosită structura foreach ( as ) (de care m-am molipsit de cînd programam în Java); de exemplu:
<?php
function afisare_tablou($tablou) {
foreach($tablou as $i=>$v)
echo "a[$i]=$v\n"; }
?>
Atunci se va afișa:
a[1]='Valoarea1'
a[2]='Valoarea2'
a[0]='Valoarea0'
Ordinea afișarii este diferită. Deoarece vectorii sînt întotdeauna ordonați, iar valoarea cu indexul 0 a fost adăugată în ultimul rînd.
Soulții.
(1) Specificarea numarului de elemente ale vectorului.
<?php
$a = array(3);
?>
(2) Reindexarea vectorului folosind funcția array_values.
<?php
$a = array_values($a);
?>
(3) Sortarea vectorului folosind funcția ksort.
<?php
ksort($a);
?>
[1] „Libertatea înseamnă răspundere, de aceea majoritatea oamenilor se tem de ea.” (Bernard Shaw)
Niciun comentariu:
Trimiteți un comentariu