Vektorët në PHP
Vektorët janë një term shumë i njohur në botën e shkencave kopjuterike dhe kushdo që ka bërë një klasë informatike apo është marrë për hobi me një gjuhë programimi, në baze 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.</p>
Ç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ë.</p>
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.</p>
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.</p>
<?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.</p>
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.</p>
<?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.</p>
<?php
$vek1 = array(10=>'molle', 20=>'dardhe', 30=>'portokall');
$vek2 = array('celular'=>'iphone', 'tv'=>'samsung', 'frut'=>'molle');
$vek3 = array(10=>'molle', 'qershia', 'limon');
?>
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.</p>
Meqë mësuam si të krijojmë vektorë, le të shohim si ti shfaqim vlerat e tyre. Shembulli i parë është më i thjeshti.</p>
<?php
$vektori = array('molle', 'dardhe', 'portokall');
echo $vektori[0]; //printon 'molle'
echo $vektori[1]; //printon 'dardhe'
echo $vektori[2]; //printon 'portokall'
?>
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.</p>
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.</p>
<?php
$vektori = array('molle', 'dardhe', 'portokall');
$vektori[] = 'qershi'; //e shton elementin ne fund te vektorit
$vektori[20] = 'luleshtrydhe'; //e shton elementin me celesin 20
$vektori[1] = 'banane'; //e mbivendos elementin ne vend te elementit me celes 1, pra ne vend te 'dardhe'
?>
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ë.</p>
<?php
$emrat = array('landi', 'moza', 'beni');
foreach($emrat as $vlera){
echo $vlera . '<br />';
}
?>
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.</p>
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.</p>
<?php
$emrat = array('frut'=>'molla', 'perime'=>'domatja', 'qytet'=>'saranda');
foreach($emrat as $celesi=>$vlera){
echo $celesi . '->' . $vlera . '<br />';
}
?>
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().</p>
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.</p>
<?php
$emrat = array('landi', 'moza', 'beni');
for($i = 0; $i < count($emrat); $i++){
echo $emrat[$i] . '<br />';
}
?>
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–).</p>
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().</p>
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.</p>
<?php
$studentet = array('meshkuj'=>array('landi', 'beni', 'genci'), 'femra'=>array('mira', 'bruna', 'moza'));
?>
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.</p>
<?php
$vektori = array('studentet'=>array('meshkuj'=>array('landi', 'beni', 'genci'), 'femra'=>array('mira', 'bruna', 'moza')), 'molla', 'dardha');
?>
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>
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.</p>
<?php
$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 '<br />';
}
?>
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ë:</p>
$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.</p>
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.</p>
(Shpjegim për më poshtë: në fillim ju tregoj çfarë bën e më pas kodin; që mos të ngatërroheni)</p>
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.</p>
<?php
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
sort($emrat);
print_r($emrat);
?>
rsort() – Renditja sipas alfabetit nga lart->poshtë (z-a, 9-1). Çelësat nuk ruhen.</p>
<?php
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
rsort($emrat);
print_r($emrat);
?>
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.</p>
<?php
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
asort($emrat);
print_r($emrat);
?>
arsort() – Renditja sipas alfabetit nga lart->poshtë duke ruajtur çelësat.</p>
<?php
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
arsort($emrat);
print_r($emrat);
?>
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.</p>
<?php
$emrat = array('c'=>'beni', 'd'=>'landi', 'a'=>'genci', 'e'=>'alma', 'b'=>'juna', 'f'=>'miri');
ksort($emrat);
print_r($emrat);
?>
krsort() – Renditja e çelësave sipas alfabetit nga lart->poshtë.</p>
<?php
$emrat = array('c'=>'beni', 'd'=>'landi', 'a'=>'genci', 'e'=>'alma', 'b'=>'juna', 'f'=>'miri');
krsort($emrat);
print_r($emrat);
?>
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.</p>
<?php
$emrat = array('emri1', 'emri10', 'emri20', 'emri2', 'emri27');
natsort($emrat);
print_r($emrat);
?>
shuffle() – Renditje e rastësishme e elementëve. Çdo egzekutim i rendit rastësisht.</p>
<?php
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
shuffle($emrat);
print_r($emrat);
?>
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.</p>
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.</p>
<?php
$frutat = array('molle', 'dardhe', 'pjeshke', 'portokall', 'banane', 'qershi');
unset($frutat[3]); //fshin 'portokall'
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.</p>
<?php
$frutat = array('molle', 'dardhe', 'pjeshke', 'portokall', 'banane', 'qershi');
echo count($frutat); //printon '6'
?>
range() – Një funksion i nevojshëm që gjeneron vektorë në bazë të kufijve.</p>
<?php
$alfabeti = range('a', 'z'); //krijon nje vektor me te gjitha germat e alfabetit
$numrat = range(1, 9); //krijon nje vektor me numrat nga 1 deri tek 9
?>
in_array() – Kontrollon nëse një vlerë egziston në vektor. Kthen TRUE nëse po dhe FALSE nëse jo.</p>
<?php
$frutat = array('molle', 'dardhe', 'pjeshke', 'portokall', 'banane', 'qershi');
if(in_array('molle', $frutat)){
echo 'Nje molle ka mesatarisht 44 Kalori
';
}
?>
list() – Liston vlerat e vektorit në variabla të përcaktuara nga programuesi.</p>
<?php
$vektori = array('samsung', 'iphone', 'imac');
list($tv, $celular, $kompjuter) = $vektori;
echo $tv . ' ' . $celular . ' ' . $kompjuter;
?>
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).</p>
<?php
$frutat = array('molle', 'dardhe', 'molle', 'portokall', 'portokall', 'qershi');
$unike = array_unique($frutat);
print_r($unike);
?>
array_merge() – Bashkon 2 ose më shumë vektorë në një të vetëm.</p>
<?php
$frutatBaze = array('molle', 'dardhe', 'portokall', 'qershi');
$frutaEgzotike = array('banane', 'kivi', 'mango');
$frutat = array_merge($frutatBaze, $frutaEgzotike);
print_r($frutat);
?>
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.</p>
<?php
$celesat = array('pije', 'kengetare', 'celular');
$vlerat = array('red bull', 'lady gaga lol', 'iphone');
$vektori = array_combine($celesat, $vlerat);
print_r($vektori);
?>
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.</p>
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 sygjerime, mos hezitoni të shkruani në komentet më poshtë.</p>
Mësim të mbarë.</p>
Vektorët në PHP është një postim nga: Feniksi.Com - Thesari i Njohurive</p>
Per me shume artikuj te ngjashem vizitoni: http://www.feniksi.com/?p=1393
Vektorët janë një term shumë i njohur në botën e shkencave kopjuterike dhe kushdo që ka bërë një klasë informatike apo është marrë për hobi me një gjuhë programimi, në baze 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.</p>
Ç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ë.</p>
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.</p>
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.</p>
<?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.</p>
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.</p>
<?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.</p>
<?php
$vek1 = array(10=>'molle', 20=>'dardhe', 30=>'portokall');
$vek2 = array('celular'=>'iphone', 'tv'=>'samsung', 'frut'=>'molle');
$vek3 = array(10=>'molle', 'qershia', 'limon');
?>
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.</p>
Meqë mësuam si të krijojmë vektorë, le të shohim si ti shfaqim vlerat e tyre. Shembulli i parë është më i thjeshti.</p>
<?php
$vektori = array('molle', 'dardhe', 'portokall');
echo $vektori[0]; //printon 'molle'
echo $vektori[1]; //printon 'dardhe'
echo $vektori[2]; //printon 'portokall'
?>
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.</p>
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.</p>
<?php
$vektori = array('molle', 'dardhe', 'portokall');
$vektori[] = 'qershi'; //e shton elementin ne fund te vektorit
$vektori[20] = 'luleshtrydhe'; //e shton elementin me celesin 20
$vektori[1] = 'banane'; //e mbivendos elementin ne vend te elementit me celes 1, pra ne vend te 'dardhe'
?>
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ë.</p>
<?php
$emrat = array('landi', 'moza', 'beni');
foreach($emrat as $vlera){
echo $vlera . '<br />';
}
?>
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.</p>
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.</p>
<?php
$emrat = array('frut'=>'molla', 'perime'=>'domatja', 'qytet'=>'saranda');
foreach($emrat as $celesi=>$vlera){
echo $celesi . '->' . $vlera . '<br />';
}
?>
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().</p>
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.</p>
<?php
$emrat = array('landi', 'moza', 'beni');
for($i = 0; $i < count($emrat); $i++){
echo $emrat[$i] . '<br />';
}
?>
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–).</p>
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().</p>
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.</p>
<?php
$studentet = array('meshkuj'=>array('landi', 'beni', 'genci'), 'femra'=>array('mira', 'bruna', 'moza'));
?>
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.</p>
<?php
$vektori = array('studentet'=>array('meshkuj'=>array('landi', 'beni', 'genci'), 'femra'=>array('mira', 'bruna', 'moza')), 'molla', 'dardha');
?>
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>
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.</p>
<?php
$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 '<br />';
}
?>
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ë:</p>
$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.</p>
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.</p>
(Shpjegim për më poshtë: në fillim ju tregoj çfarë bën e më pas kodin; që mos të ngatërroheni)</p>
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.</p>
<?php
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
sort($emrat);
print_r($emrat);
?>
rsort() – Renditja sipas alfabetit nga lart->poshtë (z-a, 9-1). Çelësat nuk ruhen.</p>
<?php
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
rsort($emrat);
print_r($emrat);
?>
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.</p>
<?php
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
asort($emrat);
print_r($emrat);
?>
arsort() – Renditja sipas alfabetit nga lart->poshtë duke ruajtur çelësat.</p>
<?php
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
arsort($emrat);
print_r($emrat);
?>
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.</p>
<?php
$emrat = array('c'=>'beni', 'd'=>'landi', 'a'=>'genci', 'e'=>'alma', 'b'=>'juna', 'f'=>'miri');
ksort($emrat);
print_r($emrat);
?>
krsort() – Renditja e çelësave sipas alfabetit nga lart->poshtë.</p>
<?php
$emrat = array('c'=>'beni', 'd'=>'landi', 'a'=>'genci', 'e'=>'alma', 'b'=>'juna', 'f'=>'miri');
krsort($emrat);
print_r($emrat);
?>
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.</p>
<?php
$emrat = array('emri1', 'emri10', 'emri20', 'emri2', 'emri27');
natsort($emrat);
print_r($emrat);
?>
shuffle() – Renditje e rastësishme e elementëve. Çdo egzekutim i rendit rastësisht.</p>
<?php
$emrat = array('beni', 'landi', 'genci', 'alma', 'juna', 'miri');
shuffle($emrat);
print_r($emrat);
?>
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.</p>
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.</p>
<?php
$frutat = array('molle', 'dardhe', 'pjeshke', 'portokall', 'banane', 'qershi');
unset($frutat[3]); //fshin 'portokall'
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.</p>
<?php
$frutat = array('molle', 'dardhe', 'pjeshke', 'portokall', 'banane', 'qershi');
echo count($frutat); //printon '6'
?>
range() – Një funksion i nevojshëm që gjeneron vektorë në bazë të kufijve.</p>
<?php
$alfabeti = range('a', 'z'); //krijon nje vektor me te gjitha germat e alfabetit
$numrat = range(1, 9); //krijon nje vektor me numrat nga 1 deri tek 9
?>
in_array() – Kontrollon nëse një vlerë egziston në vektor. Kthen TRUE nëse po dhe FALSE nëse jo.</p>
<?php
$frutat = array('molle', 'dardhe', 'pjeshke', 'portokall', 'banane', 'qershi');
if(in_array('molle', $frutat)){
echo 'Nje molle ka mesatarisht 44 Kalori

}
?>
list() – Liston vlerat e vektorit në variabla të përcaktuara nga programuesi.</p>
<?php
$vektori = array('samsung', 'iphone', 'imac');
list($tv, $celular, $kompjuter) = $vektori;
echo $tv . ' ' . $celular . ' ' . $kompjuter;
?>
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).</p>
<?php
$frutat = array('molle', 'dardhe', 'molle', 'portokall', 'portokall', 'qershi');
$unike = array_unique($frutat);
print_r($unike);
?>
array_merge() – Bashkon 2 ose më shumë vektorë në një të vetëm.</p>
<?php
$frutatBaze = array('molle', 'dardhe', 'portokall', 'qershi');
$frutaEgzotike = array('banane', 'kivi', 'mango');
$frutat = array_merge($frutatBaze, $frutaEgzotike);
print_r($frutat);
?>
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.</p>
<?php
$celesat = array('pije', 'kengetare', 'celular');
$vlerat = array('red bull', 'lady gaga lol', 'iphone');
$vektori = array_combine($celesat, $vlerat);
print_r($vektori);
?>
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.</p>
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 sygjerime, mos hezitoni të shkruani në komentet më poshtë.</p>
Mësim të mbarë.</p>
Vektorët në PHP është një postim nga: Feniksi.Com - Thesari i Njohurive</p>
Per me shume artikuj te ngjashem vizitoni: http://www.feniksi.com/?p=1393