Kurs: PHP programiranje Materijali vezani uz ovu lekciju: - Test višedimenzionalni nizovi i funkcionalnost nad nizovima - Višedimenzionalni nizovi i funkcionalnost nad nizovima (PDF dokument) Niz parova (asocijativni niz)Osim nizova u kojima svaki član ima svoju poziciju određenu indeksom niza, moguće je napraviti i niz u kome su vrednosti vezane za određene ključeve u tom nizu.Na primer, ukoliko bismo želeli da napravimo niz država, i svakoj državi u nizu pridružimo njen glavni grad, upotrebili bismo ovu vrstu niza. Pri tom, države bi mogle biti ključevi, dok bi vrednosti mogli biti gradovi. Izgradnja tog niza, izgledala bi ovako: <?php... pri čemu vrednost sa leve strane znaka => predstavlja ključ, a vrednost sa desne strane, predstavlja vrednost tog ključa. Dobijanje vrednosti određenog ključa u ovakvom nizu prilično je jednostavno: <?phpOva linija koda, emitovaće vrednost za ključ »srbija« što je u ovom slučaju Beograd. Za razliku od većine ostalih jezika, php neće prijaviti grešku prilikom unosa duplih ključeva, ali, treba znati da će PHP vratiti samo poslednji iz niza duplih ključeva, pa treba obratiti pažnju da svi ključevi budu unikatni. Višedimenzionalni nizOsim jednodimenzionih nizova, koji su obrađeni u prethodnoj lekciji, php je u stanju da prepozna i takozvane višedimenzionalne nizove. Ovakvi nizovi, korisni su za rad sa podacima koji imaju matričnu ili tabelarnu formu.Na primer, recimo da želimo da uskladištimo podatke u vidu tabele, tako da ta tabela sadrži sledeće kolone: ID, Ime, Prezime, Matični broj. U tom slučaju mogli bismo iskoristiti dvodimenzionalni niz. <?phpOvaj niz smo mogli da napunimo i drugačije, pri samoj inicijalizaciji: <?phpDakle, ukoliko bi želeli da dobijemo iteraciju kroz sva imena ove tabele, napisali bismo kod: <php... ili, ukoliko želimo da objavimo sve podatke iz tabele: <phpOva rešenja su praktična kada imamo fiksan broj članova podniza (u ovom slučaju to su kolone naše tabele), međutim, ne i ukoliko želimo da rukujemo nekim dinamičkim podacima, čija količina nije unapred poznata. Na primer, program koji rukuje slikama u kome korisnik može da učita sliku bilo kog formata. U tom slučaju, morali bismo da radimo sa nizovima nepoznate veličine i morali bismo da upotrebimo nešto drugačiji metod za iteraciju kroz njegove članove. Npr. matrica koja ima vrednosti: 1 2 3 4Ova matrica bi u formi niza izgledala ovako: <?php... i lako bi bilo napraviti iteraciju kroz nju, izvedenu iz malopređašnjeg primera. Ali, ukoliko zamislimo da smo, umesto ove poznate strukture, dobili samo jednu promenljivu $niz, čije podatke ne znamo (osim da je dvodimenzionalni niz), morali bismo da pribegnemo drugoj tehnici. //vrši se iteracija nad spoljašnjim nizomAli, ni ovo nije dovoljno da bi se sačuvali podaci o nekoj slici, jer slika na svakoj koordinati, poseduje određeni set podataka (o boji). Obzirom da se boja najčešće sastoji od tri vrednosti (ukoliko se radi o RGB modelu), za svaku tačku moraćemo da odvojimo još jedan niz od tri člana. Postoje naravno i druge, mnogo efikasnije metode da se rukuje ovakvom vrstom podataka (npr. klase). Da bismo ispunili pomenuti zahtev, potrebno je malo izmeniti dosadašnji kod. Pre svega, recimo da niz koji smo dobili parsiranjem neke slike izgleda ovako: $niz = array(... tako da je svaki podniz glavnog niza jedan red, a svaki podniz u jednom redu, jedna tačka. Za iteraciju kroz ovako serijalizovane podatke, mogli bismo iskoristiti sledeći kod: //prolaz kroz spoljasnji nizJedna od olakšica, koju je moguće koristiti prilikom rada sa višedimenzionalnim nizovima, je foreach petlja. Ova petlja sama vodi računa o veličini i pozicijama članova niza prilikom iteracije, pa je tako dobra za neke jednostavnije operacije. Sa druge strane, ovakav pristup smanjuje kontrolu nad samim članovima niza. Foreach petlja će biti detaljnije opisana u jednoj od narednih lekcija. Ovako bi izgledalo kretanje kroz melopređašnji niz, korišćenjem foreach petlje: <?php Napredne funkcije nad nizovimaZa prikaz članova niza, bez kretanja kroz pojedinačne članove (kako je rađeno u prethodnim primerima) moguće je koristiti funkciju print_r. Ova funkcija razlaže niz, prikazujući njegove ključeve ili brojeve indeksa i vrednosti koje se nalaze ispod njih.Na primer: <?phpimaće sledeći rezultat: Array ([srbija] => beograd [francuska] => pariz [engleska] => london [usa] => vasington)Ova funkcija vrši kretanje kroz niz i izvršavanje određene funkcije na svakom članu tog niza. Na primer: <?phpOvaj kod, emitovaće: beogradparizlondonvasingtonFunkcija će proći kroz niz i startovati funkciju printf nad svakim članom niza. Umesto printf, moguće je kao parametar, priložiti i bilo koju drugu funkciju. Recimo, funkciju koja proverava vrednost i ukoliko ta vrednost ispunjava neke uslove, smešta je u drugi niz. array_fill()Ukoliko želimo da formirano niz ispunjen nekom statičkom vrednošću, možemo upotrebiti ovu funkciju, pri čemu je prvi parametar - početni indeks niza, drugi parametar - broj ubačenih članova, a poslednji parametar - vrednost koja se ubacuje. <?phpOvaj kod vraca: Array ( [0] => pozdrav [1] => pozdrav [2] => pozdrav [3] => pozdrav [4] => pozdrav [5] => pozdrav [6] => pozdrav [7] => pozdrav [8] => pozdrav [9] => pozdrav ) Na ovaj način, moguće je jednostavno kopirati više nizova u drugi niz, odnosno, napraviti višedimenzionalni niz, obzirom da ova funkcija kao parametar može primiti i sam niz. array_flip()Menja položaje ključeva i vrednosti. Ukoliko je niz sastavljen od ključeva i vrednosti, napraviće zamenu ključeva i vrednosti, a ukoliko niz nema ključeve, već samo indekse, zameniće indekse članova za vrednosti članova. Kod: <?phpemituje: Array ( [beograd] => srbija [pariz] => francuska [london] => engleska [vasington] => usa ) array_pop()Da bismo razumeli ovu i sledeću funkciju nad nizovima, potrebno je prvo da razumemo dva načina za pristup bilo kakvim kolekcijama podataka u programiranju - FIFO i LIFO. FIFO, što je skraćenica za First In First Out (prvi unutra prvi napolje) podrazumeva da je element, koji je prvi pristupio kolekciji, prvi i napušta kolekciju podataka. Dok LIFO, Last In First Out (poslednji unutra prvi napolje), podrazumeva da element koji je poslednji pristupio kolekciji, prvi napusti kolekciju. Često se ova dva pristupa porede i sa radnim stolom i redom u pošti.
Identično je i u programiranju: stack (sto) i queue (pošta). Obično se (generalno u programiranju) za ova dva tipa punjenja kolekcije podataka, vezuju i dve funkcije. Za stack to su pop i push, a za queue, dequeue i enqueue. array_pop() će dakle, izvući i obrisati poslednji element iz niza. Ali i postaviti marker na prethodnu poziciju. Dakle, sledeći kod će emitovati vasington kao rezultat: <?phpali će sledeći kod emitovati: vasingtonlondonparizbeograd <?php Da bi po istom principu dodali element u niz, koristimo funkciju: array_push() Rezultat je: Array ( [0] => beograd [1] => pariz [2] => london [3] => vasington ) Ova funkcija, daje rezultat identičan onome koji bismo dobili kada bi vrednost uneli direktno, naredbom: $niz[]="vasington"; Ali, korišćenje array_push() funkcije daje nešto brži rezultat, zbog čega je bolja pri radu sa većim količinama podataka. list()Dodeljuje vrednosti niza prosleđenoj listi varijabli. <?php Ovakav pristup dobar je za malu količinu, statičkih podataka. Rezultat koda će biti: pariz Najbitnije iz lekcijePHP podržava nizove nizova, odnosno, višedimenzionalne nizove.
|