Programim ne Web

Download Report

Transcript Programim ne Web

Vektoret
Programim ne Web
Leksion 4
Iralda Mitro
1
Vektoret
• Nje vektor (array) eshte nje varg objektesh me tip dhe madhesi te njejte.
Krijimi i nje vektori ne PHP:
$languages[ ] = "Spanish";
// $languages[0] = "Spanish"
• Mund te shtoni edhe elemente te tjera ne vektor pa percaktuar indekset e
elementeve, si me poshte:
$languages[ ] = "English";
// $languages[1] = "English"
$languages[ ] = "Shqip";
• Cdo element i ri shtohet ne pozicionin “gjatesia e vektorit +1”
• Ose mund te shtoni elementet e vektorit ne nje pozicion te caktuar, psh:
$languages[15] = "Italian";
Iralda Mitro
2
Vektoret e gatshem
• Ne PHP ka tre funksione te gatshem per te ndertuar nje vektor.
– array()
– list()
– range()
• Megjithese te tre arrijne te njejtin rezultat, per krijimin e vektorit, ka
raste kur perdorimi i njerit funksion eshte me i pershtatshem se te
tjeret.
Iralda Mitro
3
array()
• Ky funksion merr si input zero ose me shume elemente dhe kthen nje
vektor te perbere nga keto elemente. Sintaksa eshte:
– array array ( [element1, element2 … ] )
• Funksioni array() ndoshta nuk eshte asgje me teper se nje deklarim
me i qarte qe po krijohet nje vektor
• Shembull
$languages = array ("English", "Shqip",
"Spanish");
Iralda Mitro
4
array()
• Ne PHP mund te krijoni edhe vektore te shoqeruar. Psh:
$languages = array ("Spain" => "Spanish",
“Shqiperi" => "Shqip",
"United States" => "English");
// $languages["Spain"] = "Spanish"
// $languages["Shqiperi"] = "Shqip"
// $languages["United States"] = "English”
• Perdorimi i vektoreve te shoqeruar eshte i pershtatshem veçanerisht
ne rastet kur perdorimi i vlerave te indeksuara nuk ka kuptim.
Iralda Mitro
5
list()
• Ky funksion eshte i ngjashem me array(), megjithese perdoret per te dhene vlera
njekohesisht variablave, nga vlerat e marra nga nje vektor, me nje veprim te vetem.
Sintaksa e tij eshte :
– void list (variable1 [, variable2, ...] )
• Mund te jete veçanerisht i nevojshem kur merret informacioni nga nje baze te
dhenash ose nga nje skedar.
• Supozojme se duam te formatojme dhe te afishojme informacionin e marre nga nje
skedar tekst, ku çdo rresht i skedarit permban informacionin e perdoruesit, duke
perfshire ketu emrin, profesionin dhe ngjyren e preferuar, ku secila pjese e
informacionit ndahet me nje vije te drejte ( | ). Cdo rresht do te dukej si:
– Al Pacino|Actor|green
– Banderas|Actor|red
• Nese perdorim list(), me nje cikel te thjeshte mund te lexohet çdo rresht, te
caktohet çdo pjese informacioni ne nje variabel, te formatohen dhe te afishohen te
dhenat sipas nevojes.
Iralda Mitro
6
list()
// Per sa kohe qe nuk eshte arritur fundi i skedarit (end-of-file), merr rreshtin tjeter
while ($line = fgets ($user_file, 4096)) :
// perdor split() per te ndare çdo pjese te dhenash,
// cakto te dhenat si vlera per variablat $name,$occupation, dhe $color
list ($name, $occupation, $color) = split ( "|",
$line);
// formato dhe afisho te dhenat
print "Name: $name <br>";
print "Occupation: $occupation <br>";
print "Favorite color: $color <br>";
endwhile;
Cdo rresht do te lexohet e te formatohet sipas rradhes si me poshte:
Name: Al Pacino
Occupation: Actor
Favorite Color: green
Iralda Mitro
7
range()
• Ky funksion ofron nje menyre te lehte dhe te shpejte per te krijuar
dhe mbushur nje vektor me nje rang te caktuar vlerash te plota
(integer), duke percaktuar rangun nga vlera me e vogel deri tek me e
madhja.
array range (int low, int high)
Shembull:
$lottery = range(0,9);
// $lottery = array(0,1,2,3,4,5,6,7,8,9);
Iralda Mitro
8
Vektoret shume-dimensionale
• Ne PHP mund te krijojme edhe vektore shume-dimensionale (vektor
vektoresh) si me poshte:
– dy-dimensional
• $chessboard[1][4] = "King";
• $capitals["USA”]["Ohio"] = "Columbus";
• $kryeqytetet[“Britani”][“Skoci”]=“Celtics”;
– tre-dimensional
• $streets["USA“]["Ohio"]["Columbus"] =
"Harrison";
• $rruget[“Albania”][“Tirana”][“Blloku”] =
“Rruga Ismail Qemali”;
Iralda Mitro
9
Vektoret shume-dimensionale
PSh: Kemi nje vektor qe permban informacion rreth embelsirave dhe detajeve
te pergatitjes se tyre. Do te ishte shume e veshtire te realizohej kjo me nje
vektor nje-dimensional, prandaj perdorim nje vektor dy-dimensional:
$desserts = array (
"Fruit Cup" => array (
"calories" => "low",
"served" => "cold",
"preparation" => "10 minutes"
),
“Cake" => array (
"calories" => "high",
"served" => "hot",
"preparation" => "45 minutes"
)
);
Iralda Mitro
10
Vektoret shume-dimensionale
• Pasi eshte krijuar vektori, çdo elementi mund t’i referohemi sipas
çelesave perkates:
– $desserts["Fruit Cup"] ["preparation"]
// kthen "10 minutes“
– $desserts[“Cake"] ["calories"] // kthen "high"
• Vektoreve shume-dimensionale mund t’u jepen vlera ne te njejten
menyre si ata nje-dimensionale:
– $desserts["Cake"]["calories"] = "too many";
– // caktohet vlera "too many" per veçorine “calories” te "Cake"
Iralda Mitro
11
Si i referohemi vektoreve shume-dimensionale?
• Vektoreve shume-dimensionale i referohemi ne nje menyre pak me
ndryshe se tipeve te tjera te te dhenave. Mund te perdorim
operatorin e ngjitjes se stringjeve:
– print “Kalorite e kekut jane“.
$desserts[“Cake"]["calories"];
• Ose mund te vendosim vektorin shume-dimensionale ne kllapa {}:
– print “Kalorite e kekut jane
{$desserts[Cake][calories]}”;
– Vereni !
• nuk perdorim thonjeza per çelesat e vektorit
• nuk ka hapesira mes kllapa {} dhe referimit te vektorit.
Iralda Mitro
12
Kapja e vlerave te vektorit
• PHP ka disa disa funksione per te marre vlerat dhe çelesat e nje vektori.
• Funksioni in_array() perdoret per te percaktuar shpejt nese nje element
ndodhet apo jo ne nje vektor dhe kthen true nese ndodhet dhe false, ne
te kundert. Sintaksa eshte:
bool in_array(mixed element, array array)
• Ky funksion eshte i pershtatshem sepse eliminon perdorimin e cikleve
per te kerkuar ne çdo element te vektorit.
• Ne kete shembull perdoret in_array() per te kerkuar elementin "Russian"
ne vektorin $languages:
$languages = array ("English", "Shqip", "Spanish");
$exists = in_array("Russian", $languages); // false
$exists = in_array("English", $languages); // true
Iralda Mitro
13
array_keys()
• Ky funksion kthen nje vektor qe permban te gjithe çelesat qe ndodhen ne
vektorin input. Nese perdorni opsionin search_element, atehere do te
ktheje vetem çelesat qe i korrespondojne atij elementi te veçante,
perndryshe do te kthehen te gjithe çelesat e vektorit.
• Sintaksa eshte:
– array array_keys (array array, [search_element])
• Shembull per te kthyer çelesin e nje elementi te dhene:
$great_wines = array (“Australia” => “Hills 96”,
“France” => “Vogue 97” , “Austria” => “Artinger 97”);
$great_labels = array_keys($great_wines);
// $great_labels = array(“Australia”, “France”, “Austria”);
$great_labels = array_keys($great_wines, “Hills 96");
// $great_labels = array("Australia");
Iralda Mitro
14
Shembull - array_keys()
$kryeqyetet = array (“Itali” =>
“Rome”, “Gjermani” => “Berlin”,
“Spanje” => “Madrid”, “Kosove” =>
“Prishtine”);
$shtetet = array_keys($kryeqyetet);
$shtetet = array(“Itali”, “Gjermani”,
“Spanje”, “Kosove”);
Iralda Mitro
15
array_values()
• Funksioni array_values() kthen nje vektor qe permban te gjitha vlerat qe
perbejne vektorin input. Sintaksa eshte:
– array array_values(array array)
• Ne shembullin e meparshem perdorem array_keys() per te marre çelesat e
vektorit, tani do te perdorim array_values() per te marre vlerat e vektorit.
$great_wines = array (“Australia” => “Hills
96”,
“France” => “Vogue 97” , “Austria” =>
“Artinger 97”);
$great_labels = array_values($great_wines);
//$great_labels = array (“Hills 96”, “Vogue
97”, “Artinger 97”);
Iralda Mitro
16
Shembull – array_values()
$kryeqyetet = array (“Itali” =>
“Rome”, “Gjermani” => “Berlin”,
“Spanje” => “Madrid”, “Kosove” =>
“Prishtine”);
$qytetet = array_values($kryeqyetet);
$qytetet = array(“Rome”, “Berlin”,
“Madrid”, “Prishtine”);
Iralda Mitro
17
Shtimi dhe heqja e elementeve
• array_push()
• Ky funksion shton nje ose me shume vlera ne fund te vektorit.
– int array_push(array array, mixed var, […])
• Gjatesia e vektorit do te rritet ne perpjestim te drejte me numrin e vlerave qe
futen ne vektor.
• Shembull:
$languages = array("Spanish", "English", "French");
array_push($languages, "Russian", "German",
"Shqip");
Iralda Mitro
18
Shtimi dhe heqja e elementeve
• array_pop()
• Ky funksion eshte i kunderti i funksionit array_push(), duke hequr nje
vlere nga fundi i vektorit dhe kthen kete vlere.
– mixed array_pop(array array)
• Ne çdo iteracion array_pop() do te shkurtoje gjatesine e vektorit me 1.
$languages = array ("Spanish", "English",
"French", "Russian", "German", "Shqip");
$a_language = array_pop ($languages);
// $a_language = "Shqip"
$a_language = array_pop ($languages);
// $a_language = "German”
Iralda Mitro
19
Shtimi dhe heqja e elementeve
• Ndryshimi kryesor ndermjet array_push() dhe array_pop() eshte
se array_push() lejon te shtohen disa elemente njekohesisht,
ndersa array_pop() mund te heqe çdo here, vetem nga nje
element.
• Arsyeja pse perdoren array_push() dhe array_pop() eshte se ato
ofrojne nje menyre te paster per te manipuluar elementet e
vektorit dhe per te kontrolluar gjatesine pa u shqetesuar per vlerat
e painicializuara apo boshe.
Iralda Mitro
20
Shtimi dhe heqja e elementeve
• array_shift()
• Ky funksion vepron si array_pop(), vetem se ai heq nje element nga
fillimi (ana e majte) e vektorit. Te gjithe elementet e mbetur te
vektorit shtyhen me nje njesi drejt fillimit te vektorit.
– mixed array_shift (array array)
• Shembull:
$languages = array("Spanish", "English", "French",
"Russian");
$a_language = array_shift($languages);
// $a_language = "Spanish";
// $languages = array("English", "French", "Russian");
Iralda Mitro
21
Shtimi dhe heqja e elementeve
• array_unshift()
• Ky eshte funksion i kundert me array_shift, se shton vlera ne fillim dhe i
shtyn vlerat e vektorit ne te djathte:
– int array_unshift(array array, mixed var1 [, mixed var2.
. .])
• Mund te shtoni nje ose me shume vlera njekohesisht dhe gjatesia e vektorit
rritet ne perpjestim te drejte me numrin e vlerave te shtuara.
• Shembull:
$languages = array ("French", "Italian",
"Spanish");
array_unshift ($languages, "Russian", "Chinese");
// $languages = array ("Russian“, "Chinese“,
// "French", "Italian", "Spanish");
Iralda Mitro
22
Shtimi dhe heqja e elementeve
• array_pad()
• Ky funksion lejon qe te zgjerohet nje vektor ne nje madhesi precize,
pra te t’i rritet madhesia me nje vlere default.
– array array_pad(array array, int pad_size,
mixed pad_value);
• Parametri pad_size percakton madhesine e re te vektorit.
• Parametri pad_value percakton vleren default e cila duhet te
vendoset ne te gjithe pozicionet e reja te vektorit.
– Nese pad_size eshte pozitive, atehere vektori do te zgjerohet ne te
djathte; ndersa nese eshte negative, ne te majte.
– Nese vlera absolute e pad_size eshte me e vogel ose e barabarte
me gjatesine e vektorit, atehere nuk do te kryhet asnje veprim.
Iralda Mitro
23
Shtimi dhe heqja e elementeve
• Shembull i zgjerimit te vektorit nga fundi:
– $weights = array (1, 3, 5, 10, 15, 25, 50);
– $weights = array_pad($weights, 10, 100);
– // The result is $weights = array(1, 3, 5, 10, 15, 25, 50, 100, 100, 100)
• Shembull i zgjerimit te vektorit nga fillimi:
– $weights = array (1, 3, 5, 10, 15, 25, 50);
– $weights = array_pad($weights, − 10, 100);
– // The result is $weights = array(100, 100, 100, 1, 3, 5, 10, 15, 25, 50)
• Shembull i nje zgjerimi te pasakte te vektorit:
– $weights = array (1, 3, 5, 10, 15, 25, 50);
– $weights = array_pad ($weights, 3, 100);
– // The array $weights remains $weights = array (1, 3, 5, 10, 15, 25, 50)
Iralda Mitro
24
Bredhja e elementeve te vektorit
• reset()
• Ky funksion do te riktheje shenjuesin e vektorit, tek elementi i pare i
vektorit. Gjithashtu ai kthen vleren e elementit te pare. Sintaksa eshte:
– mixed reset (array array)
• Shohim vektorin:
– $fruits = array("apple", "orange", "banana");
• Supozojme se shenjuesi i ketij vektori eshte i vendosur ne elementin
"orange."
• Ekzekutimi i:
– $a_fruit = reset ($fruits);
• do ta dergoje shenjuesin perseri ne fillim, pra tek elementi "apple", dhe
kthen ate vlere nese reset() perdoret si nje funksion. Perndryshe, ai duhet
te thirret si me poshte:
– reset ($fruits);
• Ky kod do te dergoje shenjuesin ne fillim, por nuk do te ktheje vlere.
Iralda Mitro
25
Bredhja e elementeve te vektorit
• each()
• Ky funksion kryen dy veprime çdo here qe ekzekutohet.
1. Kthen çiftin çeles-vlere qe ndodhet ne pozicionin ku ndodhet shenjuesi
aktualisht,
2. Shtyn shenjuesin per te elementi pasardhes. Sintaksa eshte:
– array each (array array)
Iralda Mitro
26
Bredhja e elementeve te vektorit
• prev()
• Ky funksion vepron njelloj si next(), vetem se ai e kthen shenjuesin
prapa me nje pozicion, perpara se te ktheje elementin qe gjen ne
ate pozicion te shenjuesit.
• Nese zhvendosja do ta çoje shenjuesin perpara elementit te pare te
vektorit , funksioni do te ktheje false. Sintaksa eshte:
mixed prev (array array)
• Shenim Nje problem me funksionin prev() eshte se ai do te ktheje
false edhe per nje element vektori qe ekziston por qe eshte bosh.
Nese ju intereson thjesht bredhja e vektorit, duhet te perdorni
funksionin each().
Iralda Mitro
27
Bredhja e elementeve te vektorit
• end()
• Perdoret per te derguar shenjuesin tek elementi i fundit i vektorit
end (array array)
• next()
• Ky funksion e zhvendos shenjuesin me nje pozicion, perpara se te ktheje
elementin qe gjen ne ate pozicion.
• Nqs gjate zhvendosjes se shenjuesit, ai do te shkoje pas elementit te fundit
te vektorit, funksioni next() do te ktheje false. Sintaksa eshte:
mixed next (array array)
• Shenim Nje problem me next() eshte qe ai do te ktheje gjithashtu false edhe
nese elementi i vektorit ekziston por eshte bosh. Nese ju intereson thjesht
bredhja e vektorit, duhet te perdorni funksionin each().
Iralda Mitro
28
Bredhja e elementeve te vektorit
Ky shembull perdor each() per te kthyer elementin e gjetur ne pozicionin ku ndodhet
aktualisht shenjuesi:
$spices = array("parsley", "sage", "rosemary", "thyme","pepper");
// make sure that array is set at first element
reset($spices);
// create array $a_spice, which will hold four values.
$a_spice = each($spices);
Me ekzekutimin e ketij kodi, vektori $a_spice do te permbaje keto çifte çeles-vlere:
–
–
–
–
0 => 0
1 => "parsley"
key => 0
value => "parsley"
• "Parsley" mund te afishohet duke perdorur secilen nga shprehjet:
– print $a_spice[1];
– print $a_spice["value"];
Iralda Mitro
29
Bredhja e elementeve te vektorit
Krijimi i nje tabele HTML nga elementet e vektorit
$languages = array ("Country" => "Language",
"Spain" => "Spanish",
"USA" => "English",
"France" => "French",
"Russia" => "Russian");
print "<table border=0>";
reset ($languages); // move pointer to 1st element
$hd1 = key ($languages); // extract the first key and
element
$hd2 = $languages[$hd1];
// Print first key and element as table headers
print "<tr><th>$hd1</th><th>$hd2</th></tr>";
Iralda Mitro
30
Bredhja e elementeve te vektorit
next($languages); // move to next element set
//Print table rows including keys and elements of array
while ( list ($ctry,$lang) = each ($languages)) :
print "<tr><td>$ctry</td><td>$lang</td></tr>";
endwhile;
print "</table>"; // close table
• Nga ekzekutimi i ketij kodi afishohet tabela:
Iralda Mitro
31
Bredhja e elementeve te vektorit
• array_walk()
• Ky funksion ofron nje menyre te lehte per te aplikuar nje funksion per te
gjithe ose disa elemente te nje vektori. Sintaksa eshte:
int array_walk(array array, string func_name,
[mixed data])
• Funksioni i dhene si parameter inputi func_name, mund te perdoret per
shume qellime, psh: kerkimi i elementeve qe kane nje karakteristike te
veçante ose modifikimi i vlerave te vete vektorit.
• Funksionit func_name duhet t’i kalohen te pakten dy vlera: e para eshte
vlera e vektorit dhe e dyta eshte çelesi i vektorit. Nese jepet edhe parametri
opsional data, atehere ai do te jete vlera e trete e func_name.
Iralda Mitro
32
Bredhja e elementeve te vektorit
• Ne kete shembull tregohet sesi mund te perdoret funksioni array_walk()
per te fshire dublikatat (elementet qe perseriten) ne nje vektor:
function delete_dupes($element) {
static $last="";
if ($element == $last)
unset($element);
else
$last=$element;
}
$emails = array("[email protected]",
"[email protected]", "[email protected]");
sort($emails);
reset($emails);
array_walk($emails,"delete_dupes");
//$emails = array("[email protected]",
"[email protected]");
Iralda Mitro
33
Bredhja e elementeve te vektorit
• array_reverse()
• Ky funksion ofron nje menyre te lehte per te permbysur rendin e
elementeve te vektorit. Sintaksa eshte:
array array_reverse(array array)
Shembull:
$us_wine_producers = array ("California",
"Oregon", "New York", "Washington");
$us_wine_producers = array_reverse
($us_wine_producers);
// $us_wine_producers = array ("Washington", "New York", "Oregon",
"California");
Iralda Mitro
34
Bredhja e elementeve te vektorit
• array_flip()
• Ky funksion do te shkembeje (“flip”) te gjitha elementet çeles dhe vlere te
vektorit. Sintaksa eshte:
array array_flip(array array)
• Shembull:
$languages = array("Spain" => "Spanish",
"France" => "French",
"Italy" => "Italian");
$languages = array_flip($languages);
// $languages = array("Spanish" => "Spain",
// "French" => "France",
// "Italian" => "Italy");
• Mbani mend qe array_flip() vetem shkemben kombinimet çeles/vlere dhe
nuk permbys pozicionimin. Per te permbysur pozicionimin e elementeve,
perdorni array_reverse().
Iralda Mitro
35
Madhesia e vektorit
• sizeof()
• Funksioni sizeof() perdoret perdoret per te kthyer numrin e
elementeve te nje vektori. Sintaksa eshte:
int sizeof (array array)
• Shembull:
$pasta = array("bowties", "angelhair",
"rigatoni");
$pasta_size = sizeof($pasta);
// $pasta_size = 3
Iralda Mitro
36
Madhesia e vektorit
• count()
• Ky funksion, njelloj si sizeof(), kthen numrin e elementeve te vektorit.
Sintaksa eshte:
int count (mixed variable)
• Ndryshimi i vetem eshte se count() jep pak me shume informacion ne
disa raste:
• Nese variable ekziston dhe eshte nje vektor, count() do te
ktheje numrin e elementeve te tij.
• Nese variable ekziston por nuk eshte nje vektor, do te ktheje
vleren ‘1’.
• Nese variable nuk ekziston, do te ktheje vleren ‘0’.
Iralda Mitro
37
Bredhja e elementeve te vektorit
• array_count_values()
• Ky funksion eshte nje variacion i sizeof() dhe count(), vetem se ai
numeron frekuencen e vlerave qe shfaqen ne vektor. Sintaksa eshte:
array array_count_values (array array);
• Ky funksion kthen nje vektor qe do te perdore si çelesa vlerat e
vektorit, te dhene si parameter ndersa si vlera do te kete frekuencat e
tyre korresponduese, siç ilustrohet ne shembullin meposhtem:
• $states = array("OH", "OK", "CA", "PA", "OH", "OH",
"PA", "AK");
• $state_freq = array_count_values($states);
• Vektori $state_freq do te permbaje tani keto lidhje çeles/vlere:
• $state_freq = array("OH" => 3, "OK" => 1, "CA" => 1, "PA" => 2, "AK" => 1);
Iralda Mitro
38