Ndodheni ne: Guidat / PHP
Vektoret ne PHP

Vektorët në PHP

Nga më 18 July 2010 në PHP me 18 Komente

Vektorët janë ndër elementët kryesorë të një gjuhe programimi dhe PHP nuk është përjashtim. Në këtë guidë do ju tregoj çfarë janë vektorët dhe si përdoren ato në PHP, si ti shfletoni, printoni, rendisni e shumë të tjera. Programues me eksperiencë apo fillestarë absolut, ju siguroj që do të gjeni diçka për të mësuar apo mund ta përdorni guidën si referencë për funksionet e shumta.

Vektorët janë një term shumë i njohur në botën e shkencave kompjuterike dhe kushdo që ka bërë një klasë informatike apo është marrë për hobi me një gjuhë programimi, në bazë i njeh çfarë janë. Duke qenë se Feniksi synon të mësojë çdo kategori programuesish, fillestarë absolutë deri në ata me eksperiencë, më lini t’ju shpjegoj me fjalë shumë të thjeshta çfarë janë vektorët.

Çfarë janë vektorët dhe si implementohen ato në PHP?

Në terma fare të thjeshta, vektori është si një shportë frutash shumë e madhe, virtualisht infinite, e cila mban fruta, por edhe shporta të tjera më të vogla me fruta. Gjithë këto fruta dhe shporta krijojnë një kaos dhe do ishte e pamundur të gjenim një frut që kërkojmë, apo jo? Jo në vektorë! Shporta e madhe e frutave i njeh frutat dhe shportat e tjera duke i caktuar secilës nga një çelës unik. Shembulli është paksa over-the-top, por besoj e jep idenë. Për të kaluar në një gjuhë pak më abstrakte, në bazë vektorët janë koleksione elementesh ku çdo element ka një raport çelës-vlerë.

Në PHP, vektorët trajtohen si “harta” të renditura, që vlerave i cakton një çelës unik. Këto harta mund të jenë hash tables, koleksione, stacks, etj. Mund të jenë gjithashtu edhe vektorë multi-dimensionalë (do flas më pas për to) duke qenë se një vektor mund të krijohet si element i një vektori tjetër; ideja e shportave brenda shportës së madhe që ju tregova më sipër.

Vektorët në praktikë

Mund t’ju shpjegoj për orë të tëra teori rreth vektorëve, por vështirë se futeni në temë pa parë shembuj konkretë. Prandaj le ti futemi punës e të krijojmë vektorin tonë të parë, që për ironi mban fruta.

 PHP |  Kopjo Kodin |? 
1
<?php $vektori = array('molle', 'dardhe', 'portokall'); ?>

Kodi që kam shkruar më sipër është shembulli më i thjeshtë i një vektori. Mbani mend që një vektor krijohet përmes fjalës kyçe array(), vlerat futen brenda kllapave dhe ndahen nga njëra tjetra me presje. E thjeshtë besoj! Por do pyesni veten: nëse kam 100 fruta në këtë vektor, si të marr atë frut që unë dua? Këtu hynë në punë çelësat! Në shembullin më sipër unë nuk kam krijuar asnjë çelës (pëndryshe do i vinit re) sepse PHP ka menduar për mua. Në momentin që nuk vendosen çelësat, PHP i krijon automatikisht si vlera numerike, duke filluar nga 0 (zero). Pra, ka krijuar çelësin “0″ për “molle”, çelësin “1″ për “dardhe” dhe çelësin “2″ për “portokall”. Mund të jetë paksa konfuze fillimisht, por mbani mend vetëm që çelësi fillon nga 0 për elementin e parë dhe do ju tregoj unë në vijim si përdoren.

Para se t’ju tregoj si të shfaq një vlerë vektori, po ju tregoj si krijohen çelësat. Shembulli im krijon të njëjtat çelësa ashtu si PHP i krijon automatikisht.

 PHP |  Kopjo Kodin |? 
1
<?php $vektori = array(0=>'molle', 1=>'dardhe', 2=>'portokall');?>

Kjo është sintaksa e krijimit të një vektori: çelësi=>vlera. Sigurisht, çelësi mund të jetë numër ose shkrim dhe nëse është numër, nuk është e thënë të ndjekim praktikën automatike të PHP, mund ta nisim nga kushdo vlerë që duam. Po ju tregoj disa shembuj.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$vek1 = array(10=>'molle', 20=>'dardhe', 30=>'portokall');
3
$vek2 = array('celular'=>'iphone', 'tv'=>'samsung', 'frut'=>'molle');
4
$vek3 = array(10=>'molle', 'qershia', 'limon');
5
?>

Në rreshtin e parë ($vek1) kam krijuar një vektor në të cilin çelësat janë numra të parenditur. Vlera është tërësisht fakultative, për aq kohë sa kanë një lidhje logjike me kodin që po shkruani dhe e keni të lehtë ti referenconi. Në rreshtin e dytë ($vek2) kam krijuar një vektor me çelësa tekst. Referencimi i vlerave të vektorit në këtë rast është më njerëzor, duke qenë se lidhja çelës=>vlerë ka kuptim. Rreshti i tretë ($vek3) është me special. Vini re që kam krijuar vetëm një çelës numerik në elementin e parë! Duke vepruar kështu, kam instruktuar PHP-në që e dua çelësin e parë 10 dhe në vazhdim vendosi automatikisht çelësat e tjerë. Pra, nëse s’dua që vendosja automatike e çelësave të fillojë nga 0, thjeshtë përcaktoj çelësin e parë, në këtë rast 10, dhe çelësat e tjerë do jene 11, 12, 13, etj.

Meqë mësuam si të krijojmë vektorë, le të shohim si ti shfaqim vlerat e tyre. Shembulli i parë është më i thjeshti.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$vektori = array('molle', 'dardhe', 'portokall');
3
echo $vektori[0]; //printon 'molle'
4
echo $vektori[1]; //printon 'dardhe'
5
echo $vektori[2]; //printon 'portokall'
6
?>

Si ç’e shikoni, printimi i vlerave të vektorit bëhet duke thërritur variablën në të cilën ruhet vektori dhe brenda kllapave katrore vendosim çelësin. Në rastin më sipër, çelësat janë krijuar automatikisht duke filluar nga 0. Fiksojeni faktin që vlera e parë automatike është 0, përkundrazi do i shkaktoni vetes shumë dhimbje koke.

Meqë ju përmenda kllapën katrore dhe ju tregova si të printoni elementë individualë të vektorit, po ju tregoj një tjetër përdorim të kësaj kllape. Shtimi i elementëve të vektorit! Duke përdorur kllapën katrore me të njëjtën ide si printimi, mund të shtojmë elementë në vektorë qoftë në fund të tij apo në një pozicion të caktuar.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$vektori = array('molle', 'dardhe', 'portokall');
3
$vektori[] = 'qershi'; //e shton elementin ne fund te vektorit
4
$vektori[20] = 'luleshtrydhe'; //e shton elementin me celesin 20
5
$vektori[1] = 'banane'; //e mbivendos elementin ne vend te elementit me celes 1, pra ne vend te 'dardhe'
6
?>

Po nëse duam të printojmë të gjithë elementët e vektorit? Këtu në hyjnë në punë loop-at (laket), me të cilat shfletojmë vektorin nga elementi i parë deri tek i fundit. Po supozoj që keni pak njohuri për konstruket bazë të një gjuhe programimi dhe si në çdo gjuhë tjetër, edhe në PHP loop-at funksionojnë në të njëjtën mënyrë. Pra egzekutojnë një kod deri sa të plotësohen kushtet e vendosura. Nuk kam për qëllim t’ju mësoj loop-at në këtë guidë, por meqë jemi në temë, do ju tregoj 3 raste. Fillimisht do e nis me loop-ën foreach(), një konstrukt i veçantë i PHP-së që është perfekt për të shfletur vektorë.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$emrat = array('landi', 'moza', 'beni');
3
foreach($emrat as $vlera){
4
	echo $vlera . '<br />';
5
}
6
?>

Kodi është fare i thjeshtë nëse e kuptoni çfarë ndodh, por nëse jo, pa merak. Sintaksa e loop-ës foreach() fut brenda kllapave “vektorin”, fjalën kyçe “as” dhe një variabël me emër fakultativ; unë ja vendosa vlera. Në gjuhë të thjeshtë, i tregojmë PHP-së se duhet të marrë vektorin $emrat, të bëjë një lak në të gjithë elementët e tij dhe vlerën e çdo elementi ta kalojë në variablën $vlera. Në çdo instancë të lakut variabla $vlera merr vlerën e elementit të ri. Kjo është loop-a foreach() e shpjeguar me fjalët më të thjeshta të mundshme.

Mbetemi akoma tek foreach(), sepse ka diçka që mund t’ju hyjë shpesh në punë. Duke e ndryshuar vetëm paksa sintaksën e mësipërme, do të krijoj një loop foreach() nga e cila mund të marr edhe çelësat e vektorit në krah të vlerave. Shikoni shembullin e mëposhtëm.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$emrat = array('frut'=>'molla', 'perime'=>'domatja', 'qytet'=>'saranda');
3
foreach($emrat as $celesi=>$vlera){
4
	echo $celesi . '->' . $vlera . '<br />';
5
}
6
?>

Ndryshimi i vetëm është variabla $celesi që kam shtuar brenda kllapave të foreach(). Duke i shtuar atë variabël, mund të aksesojmë gjithashtu çelësat e çdo elementi të vektorit. Kjo është gjithçka që duhet të dini për loop-ën foreach() dhe ju këshilloj ta fiksoni mirë sepse do e përdorni shumë shpesh kur të punoni me vektorë. Një tjetër loop që do ju duhet ta fiksoni mirë, sepse gjen po aq përdorim është loop-a for().

Loop-a for() është praktikisht loop-a bazë në çdo gjuhë programimi dhe është hapi i parë i çdo leksoni që ju tregon për loop-at. Ideja këtu nuk është shumë ndryshe nga foreach(), sepse kjo e fundit është derivat i loop-ës for(), thjeshtë ka sintaksë paksa më të zgjeruar. Kodi i mëposhtëm bën egzaktësisht të njëjtin veprim me shembullin e parë të loop-ës foreach(), pra printon elementët e vektorit nga i pari tek i fundit.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$emrat = array('landi', 'moza', 'beni');
3
for($i = 0; $i < count($emrat); $i++){
4
	echo $emrat[$i] . '<br />';
5
}
6
?>

Shikoni që kam përdorur një variabël $i disa herë në loop! Pikërisht kjo variabël shërben për të spostuar indeksin e vektorit dhe për të aksesuar elementë të ndryshëm. Loop-a for() ka 3 shprehje: 1) shprehja e parë egzekutohet vetëm një herë dhe përcakton vlerën e nisjes; 2) shprehja e dytë egzekutohet në fillim të çdo laku dhe nëse shprehja arrihet, loop-a mbyllet; 3) shprehja e tretë egzekutohet në fund të çdo laku. Duke ecur me këtë shpjegim teorik, mund të kuptoni se $i merr fillimisht vlerën 0 (kujtoni që çelësat automatikë nisin nga 0), më pas kontrollohet nëse vlera e $i është më e vogël se numri i elementëve të vektorit (count() numëron sa elementë ka vektori) dhe nëse po vazhdohet egzekutimi i kodit brenda loop-ës, nëse jo përfundohet. Gjatë çdo laku, vlera e $i inkrementohet me 1 ($i++ është ekuivalente me $i = $i + 1). Përmes kësaj praktike shfletojmë lehtësisht të gjithë elementët e vektorit, ku variabla $i merr rolin e çelësave. Mund të bëhen shumë gjëra me një loop for(), si psh. shfletimi i vektorit mbrapsht duke e nisur vlerën e $i-së nga numri i elementëve të vektorit deri sa të arrijë në zero, dukë e dekrementuar me 1 ($i–).

Disa po pyesin veten se pse ju shpjegova foreach() dhe for(), kur në të vërtetë loop-a for() është më fleksibël dhe mund të bëjë gjithçka që loop-a foreach() bën, por edhe më tepër? E drejtë, por duhet të merrni parasysh edhe lehtësinë e përdorimit. E vërteta është se loop-a foreach() shkruhet shumë më thjeshtë se ajo for() dhe në rastet kur ju nevojitet thjeshtë të shfletoni vektorin (për ta printuar apo manipuluar), nuk do të gjeni mënyrë më të lehtë. Atëherë kur do ju duhet të bëni veprime më komplekse, thjeshtë zgjidhni loop-ën for().

Vektorët multi-dimensionalë

Ju kujtohet që pak më sipër ju fola për shportat me fruta të futura brenda shportës së madhe? E kisha fjalën pikërisht për vektorët multi-dimensionalë. Në dëgjim (lexim në fakt) të parë duket sikur po i hyjmë shumë thellë vektorëve dhe mund t’ju krijohet përshtypja se do jetë e vështirë ta gëlltisni, por ju siguroj që nuk është. PHP na lejon që brenda një vektori të krijojmë vektorë të tjerë si elementë të thjeshtë. Për mos t’ja u ndërlikuar mendjen me teori, le të shohim një shembull që do ju shpjegojë gjithçka.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$studentet = array('meshkuj'=>array('landi', 'beni', 'genci'), 'femra'=>array('mira', 'bruna', 'moza'));
3
?>

Shikoni çfarë kam shkruar më sipër. Brenda vektorit $studentet kam krijuar 2 çelësa ‘meshkuj’ dhe ‘femra’, brenda të cilëve kam deklaruar vektorë të tjerë. Ashtu si krijoj vektorë individualë, ashtu krijoj edhe vektorë brenda një vektori tjetër, duke përdorur të njëjtën logjikë dhe sintaksë. Mund të krijoj thellësi të pafundme vektorësh brenda njëri tjetrit dhe në krah të tyre mund të vendos elementë normal, si numra apo tekst. Po ju jap edhe nje shembull tjetër pak më kompleks si strukturë, por përsëri i thjeshtë sepse do përdor të njëjtat njohuri që kemi folur deri tani.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$vektori = array('studentet'=>array('meshkuj'=>array('landi', 'beni', 'genci'), 'femra'=>array('mira', 'bruna', 'moza')), 'molla', 'dardha');
3
?>

Ju kam paraqitur një vektor me 3 nivele thellësie: 1) çelësi “studentet” dhe elementet “molla” dhe “dardha”; 2) çelësat “meshkuj” dhe “femra”; 3) emrat e studentëve. Për t’ju dhënë idenë, krijova një vektor multi-dimensional me 3 nivele thellësie dhe 2 elementë normalë (tekst) në thellësinë e parë. Kombinimet mund të jenë të një imagjinate të shfrenuar, por kini kujdes të ruani orientimin në vektorët multi-dimensionalë sepse mund të humbisni lehtë. Vendosni çelësa dhe bëni kategorizim logjik që ta gjeni lehtë atë që kërkoni.

Për ta mbyllur me vektorët multi-dimensionalë, do ju tregoj si të shfletoni dhe printoni një të tillë duke përdorur shembullin e parë të dhënë në këtë seksion.

 PHP |  Kopjo Kodin |? 
01
<?php
02
$studentet = array('meshkuj'=>array('landi', 'beni', 'genci'), 'femra'=>array('mira', 'bruna', 'moza'));
03
foreach($studentet as $gjinia=>$emrat){
04
	echo $gjinia . ': ';
05
	foreach($emrat as $emri){
06
		echo $emri . ' ';
07
	}
08
	echo '<br />';
09
}
10
?>

Të them të drejtën, shfletimi i vektorëve multi-dimensionalë do pak më tepër eksperiencë se në vektorët normalë, prandaj do ju duhet ta lexoni e kuptoni kodin. Loop-a foreach() ishte zgjidhja ideale për atë që doja të realizoja unë dhe e mban shembullin të thjeshtë. Vini re edhe emrat e variablave që kam përdorur të cilat nuk janë pa qëllim, por për të më ndihmuar të orientohem në atë që po bëj. Në këtë rast doja të shfaqja emrat e studentëve të kategorizuar sipas gjinisë, e cila është vendosur si çelës në të 2 elementët e thellësisë së parë. Për thellësinë e dytë kam përdorur një foreach() tjetër e cila shfleton vektorët e emrave. Që ta kuptoni më mirë:

$gjinia kthen çelësat në thellësinë parë, pikërisht “meshkuj” dhe “femra”.
$emrat kthen vlerat e thellësisë së parë, të cilat janë në vetvete vektorë dhe mbajnë emrat.
$emri kthen emrat individualë të vektorëve, pra elementët e vektorit $emrat.

Renditja e elementëve të vektorit

Ja u them nga eksperienca se renditja e vektorëve është ndër veprimet më komune që mund të bëni me to. Mendoni që keni një listë të madhe emrash të cilët doni ti rendisni e ti printoni të renditur sipas alfabetit. Mjafton një funksion për ta bërë këtë! Por veprimet renditëse me vektorët nuk limitohen vetëm kaq, prandaj lexoni në vijim ku do ju jap shembuj dhe shpjegime për çdo tip renditjeje. Më duhet t’ju them se kam përdorur në të gjithë shembujt e renditjes print_r(), një funksion që i printon variablat në një format të lexueshëm lehtë. Në rastin tonë na shërben të shohim përmbajtjen e vektorit pa krijuar loop-a. Do ju shërbejë edhe ju të testoni kodet që do ju tregoj.

(Shpjegim për më poshtë: në fillim ju tregoj çfarë bën e më pas kodin; që mos të ngatërroheni)

sort() – Renditja standarte sipas alfabetit nga poshtë->lart (a-z, 1-9). Çelësat nuk ruhen, por ri-krijohen, që do të thotë se një element që kishte çelësin 10 para renditjes, do të marrë një çelës tjetër.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
3
sort($emrat);
4
print_r($emrat);
5
?>

rsort() – Renditja sipas alfabetit nga lart->poshtë (z-a, 9-1). Çelësat nuk ruhen.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
3
rsort($emrat);
4
print_r($emrat);
5
?>

asort() – Renditja sipas alfabetit nga poshtë->lart duke ruajtur çelësat. Pra një element me çelësin 10, mbetet serish me të njëjtin çelës.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
3
asort($emrat);
4
print_r($emrat);
5
?>

arsort() – Renditja sipas alfabetit nga lart->poshtë duke ruajtur çelësat.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
3
arsort($emrat);
4
print_r($emrat);
5
?>

ksort() – Renditja e çelësave sipas alfabetit nga poshtë->lart. E theksoj, që mos të ngatërroheni, renditja bëhet sipas çelësave dhe jo sipas vlerave si tek funksionet e mësipërme. Prandaj vendoset edhe një “k” (për “key”) përpara funksionit.

 PHP |  Kopjo Kodin |? 
1
?php
2
$emrat = array('c'=>'beni', 'd'=>'landi', 'a'=>'genci', 'e'=>'alma', 'b'=>'juna', 'f'=>'miri');
3
ksort($emrat);
4
print_r($emrat);
5
?>

krsort() – Renditja e çelësave sipas alfabetit nga lart->poshtë.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$emrat = array('c'=>'beni', 'd'=>'landi', 'a'=>'genci', 'e'=>'alma', 'b'=>'juna', 'f'=>'miri');
3
krsort($emrat);
4
print_r($emrat);
5
?>

natsort() – Renditja sipas alfabetit duket përdorur një algoritëm natyral renditjeje duke ruajtur çelësat. Çfarë do të thotë kjo është se numrat do të renditen natyralisht sipas madhësisë ashtu si një njeri i lexon, dhe jo ashtu si një kompjuter i lexon. Një kompjuter, ashtu si në funksionin sort(), do i rendiste në formën: 1, 10, 2, 20, 3, 4. Ndërsa një njeri, ashtu si në funksionin natsort() do i rendiste: 1, 2, 3, 4, 10, 20.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$emrat = array('emri1', 'emri10', 'emri20', 'emri2', 'emri27');
3
natsort($emrat);
4
print_r($emrat);
5
?>

shuffle() – Renditje e rastësishme e elementëve. Çdo egzekutim i rendit rastësisht.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
3
shuffle($emrat);
4
print_r($emrat);
5
?>

E keni vënë re tashmë që ofrohen një sërë funksionesh për renditjen e vektorëve. Ka akoma, si renditja në bazë të një funksioni të krijuar nga ju apo renditja e vektorëve multi-dimensionale, të cilat mund ti eksploroni lehtësisht me njohuritë e marra deri tani. Vini re gjithashtu që të gjitha funksionet e renditjes veprojnë direkt mbi vektorin, pra nuk kthejnë një vektor të ri të renditur.

Krahasimi i vektorëve

Vektorët krahasohen egzaktësisht si variabla të tjera, duke përdorur operatorët e krahasimit: == (identik), === (identik me tip të dhënash të njëjta dhe në të njëjtin pozicion), != ose <> (i ndryshëm) dhe !== (i ndryshëm me tip të dhënash të njëjta dhe në të njëjtin pozicion). Që 2 vektorë të jenë të barabartë, duhet që kombinimi çelësa/vlera të jetë i njëjtë. Konsideroni shembullin e mëposhtëm.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$vek1 = array('a'=>'genci', 'b'=>'landi', 'c'=>'mira');
3
$vek2 = array('a'=>'genci', 'b'=>'landi', 'c'=>'mira');
4
 
5
if($vek1 == $vek2){
6
	echo 'Vektoret jane identike.';
7
}
8
?>

Në kodin më sipër vektorët janë egzaktësisht të njëjtë dhe krahasimi kthen TRUE. Le të shohim një shembull tjetër kur vektorët do të përmbajnë të njëjtat çelësa dhe vlera, por në pozicione të ndryshme.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$vek1 = array('1'=>'molla', 2=>'dardha');
3
$vek2 = array(2=>'dardha', 1=>'molla');
4
 
5
if($vek1 === $vek2){
6
	echo 'Kjo shprehje nuk do te printohet kurre.';
7
}
8
?>

Në rastin më sipër nuk do të printohet asgjë në ekran, sepse shprehja kthen FALSE. Nëse do kisha përdorur operatorin identik (==), shprehja do të kthente TRUE, por me ===, përveç përmbajtjes së çelësave dhe vlerave, krahasohet edhe pozicioni dhe tipi i të dhënave. Në rastin tonë, elementët janë në pozicione të ndryshme, por gjithashtu kanë edhe tipe të ndryshme të dhënash. Vini re që çelësin e parë në $vek1 e kam shkruajtur në thonjëza, gjë që e kthen numrin 1 në tekst (string). Në vektorin e dytë e kam shkruajtur si numër, pa thonjëza.

Mbani mend që nëse doni të krahasoni 2 vektorë dhe nuk ka rëndësi pozicioni elementëve por vetëm përmbajtja e tyre, përdorni operatorin ==. Në rast të kundërt përdorni ===.

Funksione interesante për të punuar me vektorët

unset() – Për të fshirë elementë të vektorit. Në fakt unset() përdoret për të fshirë variabla, por në rastin e vektorëve bëhet pak më specifike.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$frutat = array('molle', 'dardhe', 'pjeshke', 'portokall', 'banane', 'qershi');
3
unset($frutat[3]); //fshin 'portokall'
4
print_r($frutat); ?>

count() – E përmenda në rastin e loop-ës for() që count() shërben për të numëruar sa elementë ka vektori.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$frutat = array('molle', 'dardhe', 'pjeshke', 'portokall', 'banane', 'qershi');
3
echo count($frutat); //printon '6'
4
?>

range() – Një funksion i nevojshëm që gjeneron vektorë në bazë të kufijve.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$alfabeti = range('a', 'z'); //krijon nje vektor me te gjitha germat e alfabetit
3
$numrat = range(1, 9);//krijon nje vektor me numrat nga 1 deri tek 9
4
?>

in_array() – Kontrollon nëse një vlerë egziston në vektor. Kthen TRUE nëse po dhe FALSE nëse jo.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$frutat = array('molle', 'dardhe', 'pjeshke', 'portokall', 'banane', 'qershi');
3
if(in_array('molle', $frutat)){
4
	echo 'Nje molle ka mesatarisht 44 Kalori :)';
5
}
6
?>

list() – Liston vlerat e vektorit në variabla të përcaktuara nga programuesi.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$vektori = array('samsung', 'iphone', 'imac');
3
list($tv, $celular, $kompjuter) = $vektori;
4
echo $tv . ' ' . $celular . ' ' . $kompjuter;
5
?>

array_unique() – Kthen një vektor me elementët unikë në vektorin fillestar. Fshin çdo element të përsëritur 2 ose më shumë herë (duke e lënë origjinalin sigurisht).

 PHP |  Kopjo Kodin |? 
1
<?php
2
$frutat = array('molle', 'dardhe', 'molle', 'portokall', 'portokall', 'qershi');
3
$unike = array_unique($frutat);
4
print_r($unike);
5
?>

array_merge() – Bashkon 2 ose më shumë vektorë në një të vetëm.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$frutatBaze = array('molle', 'dardhe', 'portokall', 'qershi');
3
$frutaEgzotike = array('banane', 'kivi', 'mango');
4
$frutat = array_merge($frutatBaze, $frutaEgzotike);
5
print_r($frutat);
6
?>

array_combine() – Bashkon 2 vektorë në një të vetëm, ku njëri është për çelësat dhe tjetri për vlerat. Vektorët duhet të përmbajnë të njëjtin numër elementësh.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$celesat = array('pije', 'kengetare', 'celular');
3
$vlerat = array('red bull', 'lady gaga', 'iphone');
4
$vektori = array_combine($celesat, $vlerat);
5
print_r($vektori);
6
?>

array_count_values() – Numëron vlerat e vektorit dhe kthen një vektor si raport i vlerave dhe numrit të herëve që janë përsëritur.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$frutat = array('molle', 'dardhe', 'molle', 'portokall', 'dardhe');
3
$raporti = array_count_values($frutat);
4
print_r($raporti);
5
?>

array_rand() – Zgjedh një element të rastësishëm të vektorit.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$perimet = array('karrote', 'laker', 'kastravec', 'domate');
3
$rast = array_rand($perimet); //kthehet nje celes i rastesishem i vektorit
4
echo $perimet[$rast];
5
?>

Së fundmi, besoj se ja vlejnë të permenden disa funksione për navigim dinamik të vektorëve, edhe pse personalisht rrallë i shoh të përdorshëm. Sidoqoftë, secili ka teknikën e tij të programimit dhe dikujt mund t’i hynë në punë. Bëhet fjalë për funksione që zhvendosin treguesin e brendshëm të vektorëve nga një element në tjetër për t’i shfletuar dhe për të marrë vlera të caktuara. Po ju tregoj disa shembuj:

 PHP |  Kopjo Kodin |? 
01
<?php
02
$kurset = array('html', 'css', 'php', 'mysql', 'javascript');
03
 
04
echo current($kurset); //merr elementin aktual. Treguesi eshte ne fillim. Printon “html”
05
echo next($kurset); //zhvendoset ne elementin tjeter. Printon “css”
06
echo next($kurset); //zhvendoset ne elementin tjeter. Prinon “php”
07
echo prev($kurset); //zhvendoset ne elementin e meparshem. Printon “css”
08
echo current($kurset); //merr elementin aktual. Treguesi eshte tek “css”. Printon “css”
09
echo end($kurset); //zhvendoset ne elementin e fundit. Printon “javascript”
10
 
11
reset($kurset); //rivendos treguesin ne elementin e pare
12
echo current($kurset); //merr elementin aktual. Treguesi eshte ne fillim. Printon “html”
13
?>

Përfundimi

Ju kam treguar çfarë janë vektorët, si funksionojnë ato në PHP, si ti krijoni, manipuloni, shfletoni, rendisni dhe në fund disa funksione për të punuar me to. Informacioni që keni marrë deri tani duhet t’ju shërbejë për të përballuar sfidat më të zakonshme, por mos u ndalni këtu. Mënyra më e mirë për të mësuar është puna dhe pasi ti keni përdorur disa herë, do jeni shumë më konfident. Kthejuni kësaj guide apo manualit të PHP-së (që është fantastik) nëse nuk mbani mend një funksion. Kini parasysh që aftësitë e mira analitike janë më të rëndësishme në programim se sa memorja e mirë, prandaj mos e vrisni mendjen nëse nuk mbani mend një funksion apo një parametër.

Vektorët janë fushë relativisht e gjerë dhe është e pamundur të përfshij në një guidë çdo skenar real apo funksion. Nëse keni pyetje apo sugjerime, mos hezitoni të shkruani në komentet më poshtë.

Mësim të mbarë.

Fadion Dashi

Fadioni është prej shumë vitesh i apasionuar pas internetit dhe punon freelance si dizenjues dhe programues per web. Kur nuk është duke punuar, i pëlqen të shkruajë, të fotografojë, të admirojë koleskionin e tij të aparatëve fotografikë manualë dhe të kalojë kohë të bukur me miqtë.

18 Komente

  1. Banago says:

    Para se të komentoj për atikullin (nuk e lexuar akamo) më bëri shumë përshtypje përkthimi i “array” si “vektor”. Unë realisht nuk dij si ta përkthej në shqip fjalën “array” në kuptimin kompjuterik të saj, por zgjedhja jote më duke interesante dhe do doja të dija si arrite aty. flm :)

  2. Fadion Dashi says:

    Ne fakt nuk eshte perkthim i imi, por e kam gjetur ne literatura te Shqipes (te lidhura me programimin sigurisht). Problemi i vetem eshte se Array dhe Vektor, ne shume gjuhe programimi jane tipe te ndryshme te dhenash :)

    Mua me pelqen ta therras edhe “liste” gjithashtu, qe do kishte edhe me kuptim real.

  3. Piro Dhima says:

    Një përkthim tjetër, mendoj më i saktë dhe i plotë, do të ishte “matricë.”

  4. Romeo Shuka says:

    :) Ky eshte nje problem qe besoj vetem gjuhetaret do mund ta zgjidhin. Si e ka then e Joni Vektor edhe Array ne gjuhe programimi jan 2 gjera te ndryshme. Te pakten ne Java Array eshte nje element i thjeshte e mund te krijohet disa dimensional kurse nje Vektor eshte nje Generics (se di ne shqip) qe luan pothuajse te njejtin rol si Array.
    Ndersa Matricat normalisht jane 2 dimensionale por mund te zgjaten sa te duam. Matricat zakonisht perdoren ne Algjeber e shume ne MatLab e perdorimin e grafikeve e sbesoj qe kane dicka te drejtperdrejte me Array. Megjithate ai qe eshte marr me programin e din shume mire per ca behet llaf. Gjuha Shqipe nga fjalet e reja eshte SHUME e varfer edhe po nuk punoi njeri (ska punuar njeri deri me sot) nuk ka per te ndryshuar gje.

  5. Fadion Dashi says:

    “Matrice” ka sens, por realisht nuk i pershtatet plotesisht nje “Array”. Matricat jane 2 dimensionale ne hapesire nese memorja s’me genjen.

    Fjala “Array” ne anglisht perdoret edhe per “Vektoret” ne matematike, prandaj ndoshta vjen edhe perkthimi i tille. Per mua “Vektor” ka sens, por per keto gjera duhen mbledhur gjuhetar dhe informaticiene :)

  6. Banago says:

    Gjuha Shqipe nga fjalet e reja eshte SHUME e varfer edhe po nuk punoi njeri (ska punuar njeri deri me sot) nuk ka per te ndryshuar gje.  

    Me sa di unë ka pasur një përpjekje nga gjuhtërë të Kosovës të cilët kanë përpiluar një “Fjalor të Informatikës”. Nuk më ka rënë në dorë, dhe me sa di është vetëm dixhital, jo i printuar. Nëse ka dikush më shumë informacion rreth tij, jam gjithë veshë të dëgjoj më shumë.

  7. Eriol says:

    ne fakt unset nuk fshin asgje, e kam pare me shume kujdes kete punen e unset pasi me ka dale nje problem ku duhet te fshija nje vlere nga nje variable, dhe perdorja unset, por cuditerisht unset heq referencen nga memorja, dhe nuk e fshin vleren, per te fshire nje vlere mendoj qe eshte me mire te perdoret, $x=”; se sa unset($x);

  8. Eriol says:

    e di ate Garbage Collection tek 5.3, po para disa muajsh me kane dale probleme me 5.3 ne disa funksione, por gjithsesi $x=NULL dhe $x = ” eshte e njejta gje, kurse per sa i perket llogjikes, pikerisht prej llogjikes nisesh qe te fshish nje vlere, pasi ajo vlere ne nje moment te caktuar te ekzekutimit te prish pune po te jete….

    ky eshte rasti konkret per te cilin e kisha fjalen…

    function form_gen($url, $id = “”, $class = “”, $input = array(), $template = “”)
    {
    $this->style[] = $this->style($template, “form”) . “rn”;

    //Dy for-et meposhte sherbejne per krahasimin e vlerave te vektorit $this->style.
    //Si pasoje e ketij krahasimi, vektori perfundimtar nuk do kete asnje element te njejte.
    //Pra gjithe elementet e vektorit do jene unik
    for($i = 0; $i style) – 1; $i++)
    {
    for($j = $i+1; $j style); $j++)
    {
    if($this->style[$i] == $this->style[$j])
    {
    unset($this->style[$j]); //ktu eshte problemi
    }
    }
    }

    $data = $this->form_open($url, $id, $class);

    foreach($input as $vlera)
    {
    $data .= $this->addInput($vlera);
    }

    $data .= $this->form_close();
    return $data;
    }

  9. Fadion Dashi says:

    Eriol, problemi eshte se PHP i liron resurset vetem ne perfundim te egzekutimit. Nga PHP 5.3 eshte implementuar Garbage Collection, per te cilin nuk mund te flas asgje ne praktike, por qe i jam i mendimit se sherben vetem per te optimizuar aksesin/ruajtjen ne memorje ne aplikacione shume te medha. Fundja PHP eshte gjuhe skriptimi qe punon nje here me memorjen dhe me pas perfundon, ndryshe nga gjuhe qe punojne me memorjen ne kohe reale me egzekutimin.

    Per nje fshirje reale te vleres mund te perdoresh $x = NULL. Ta besh vleren bosh nuk eshte gjithmone ide e mire sepse mund te rastise ne prishjen e logjikes se programit; mund te kesh krahasime nese variabla eshte bosh.

  10. Fadion Dashi says:

    $x = NULL, $x = ” apo $x = ‘kot’ do ishin e njejta gje, sepse thjeshte i japim vlere arbitrare. Ta besh NULL do ishte ide e mire vetem sepse rralle i krahason variablet nese jane NULL dhe ul mundesine e prishjes se logjikes. Sidoqofte, nuk ka ndonje rendesi te madhe.

    unset() funksionon mire per te fshire elemente vektoresh dhe ta besh vleren bosh apo NULL ne kete rast s’te sherben shume. Nuk jam ne nje mjedis ku mund te bej teste per fat te keq, por sidoqofte sjellja eshte e cuditshme.

    Sa per kodin tend, ndoshta po e kuptoj une keq logjiken, por mund te perdoresh array_unique() per te hequr vlerat e perseritura ne vend qe te krahasosh 2 instanca te vektorit.

    $this->style = array_unique($this->style);

  11. Banago says:

    Si ka mundësi që këtu numërimi fillon nga 1-shi:

    $frutat = array(‘molle’, ‘dardhe’, ‘pjeshke’, ‘portokall’, ‘banane’, ‘qershi’);
    echo count($frutat); //printon ’6′

    Kurse këtu nurërimi ffillon nga 0?

    $emrat = array(‘landi’, ‘moza’, ‘beni’);
    for($i = 0; $i < count($emrat); $i++){
    echo $emrat[$i] . '’;
    }

  12. Banago says:

    Si i bëhet nëse dua të thërras vetëm femrat ose meshkujt:

    array(‘landi’, ‘beni’, ‘genci’), ‘femra’=>array(‘mira’, ‘bruna’, ‘moza’));
    foreach($studentet as $gjinia=>$emrat){
    echo $gjinia . ‘: ‘;
    foreach($emrat as $emri){
    echo $emri . ‘ ‘;
    }
    echo ”;
    }
    ?>

  13. Fadion Dashi says:

    Hi Baki.

    Per pytjen e pare, do te duhet ti organizosh vektoret me celesat “meshkuj” dhe “femra”, jo vetem me celesin “femra” si e kam bere une. Pastaj mund te aksesosh vektorin ne formen $studentet['femra']['mira'], apo te egzekutosh nje loop per $studentet['femra'], sepse ky i fundit ne vete eshte nje vektor normal.

    Ne pyetjen e dyte, count() kthen numrin e elementeve ne forme te lexueshme nga njerezit :) . Nese ke 10 elemente, 10 do te printoje. Ne loop-en for() numrimi fillon nga 0 sepse $i niset e tille. Me count() thjeshte limitohet loop-a qe te egzekutohet deri sa te arrihet numri i elementeve te vektorit. Pra:

    kemi vektorin: $emrat['beni', 'mira', 'landi'];
    for ($i = 0; $i < count($emrat);
    vektori egzekutohet per $i=0 dhe $i me te vogel se 3 (elementet e vektorit) dhe duke qene se kemi shenjen me te vogel dhe jo me te vogel-baraz, loop-a perfundon ne vleren 2. Pra, bejme loop me $i=0, $i=1 dhe $i=2, qe jane edhe celesat e vektorit.

    Shpresoj te kem qene i qarte.

  14. Banago says:

    Për të dytën ma ke kthyer përgjigjen. Më iku nga mendja që loop-a përfundonte tek 2 nëse nuk ishte shenja baraz.

    Për të parën e ka fajin forma e komenteve, ka ngrënë kodin: Ja kodi edhe një herë:

    $studentet = array(‘meshkuj’=>array(‘landi’, ‘beni’, ‘genci’), ‘femra’=>array(‘mira’, ‘bruna’, ‘moza’));
    foreach($studentet as $gjinia=>$emrat){
    echo $gjinia . ‘: ‘;
    foreach($emrat as $emri){
    echo $emri . ‘, ‘;
    }
    echo ”;
    }

    E di si mund t’i thërras elementet një nga një nga lista shumëdimensionale. Ajo që dua është të thërras gjysmën, një dimension, meshkujt ose femrat dhe t’i kaloj në një foreach. Si bëhet?

  15. Fadion Dashi says:

    E kuptova shume mire ate qe doje te thoje, prandaj dhe te thashe qe $studentet['femra'] apo $studentet['meshkuj'] me vete jane vektore dhe si te tille, mund te behen loop normalisht:

    foreach ($studentet['meshkuj'] as $val) {
    echo $val;
    }

  16. Banago says:

    Lere se u ngaterrova me kembet e mija :D Shume flm!

  17. Fadion Dashi says:

    LOL s’ka problem po he, se jam tip i durueshem une :p. Rendesi ka qe ta kesh kuptuar :)

  18. Kurtt says:

    Tutorial mjaft i qelluar. Jeni duke bere nje pune te mrekullueshme djema :) Presim edhe tutoriale tjera..

Shkruaj një Koment