traži:  
 php.com.hr >

(...nastavak)
 


Primjer 27: Pretraživanje niza

Niz :<br>

<?

$arr_mailovi=array(

"kkondza@hotmail.com",

"kongi@programiranje.net",

"kkondza@hotmail.com",

"marko@radionica.com",

"ines@radionica.com",

"mario@hinet.hr",

"vladimir@inet.hr"

);

// ispisivanje niza

foreach ($arr_mailovi as $mail){

echo $mail ." <br>";

}

$str_trazeni="kkondza@hotmail.com";

?>

<hr>

String koji se traži :<?=$str_trazeni?><br>

<?

// traženje vrijednosti u nizu i vracanje indeksa na kojem se nalazi vrijednost

if ($nadeni=array_search ($str_trazeni,$arr_mailovi) or $nadeni===0){

echo "Pronađen je element u nizu na indeksu $nadeni => $arr_mailovi[$nadeni]<br>";

} else {

echo "Traženi string ne postoji u nizu<br>";

}

?><hr><?

//pretraživanje cijelog niza i ispis svih indeksa - FALIENO

while ($nadeni=array_search ($str_trazeni,$arr_mailovi) or $nadeni===0){

echo "Pronađeno na poziciji : $nadeni => $arr_mailovi[$nadeni]<br>";

unset ($arr_mailovi[$nadeni]);

}

?>


Objašnjenje:

U ovom primjeru cilj nam je izdvojiti zadani e-mail iz niza koji sadrži popis e-mailova. E-mail koji tražimo se zadaje u varijablu $str_trazeni.
Prvi način pretraživanja pronalazi samo prvo pojavljivanje u nizu, a ostala su zanemarena.

 

// traženje vrijednosti u nizu i vracanje indeksa na kojem se nalazi vrijednost

if ($nadeni=array_search ($str_trazeni,$arr_mailovi) or $nadeni===0){

echo "Prona?en je element u nizu na indeksu $nadeni => $arr_mailovi[$nadeni]<br>";

} else {

echo "Traženi string ne postoji u nizu<br>";

}


Za traženje vrijednosti u nizu koristi se funkcija array_search($trazeno,$niz_za_pretraziti):

Funkcija prima dva ovaezna argumenta. Prvi argument je vrijednost koja se traži, a drugi je niz u kojem se traži vrijednost. Postoji i treći, neobavezni, argument koji može biti true ili false. On služi ukoliko se želi usporediti i tip podataka. Recimo $int_broj=111 i $str_broj='111' u slučaju da je treći argument postavljen na true ne bi rezultiralo pronalaženjem vrijednosti u nizu.

Funkcija će vratiti indeks na kojem je pronađena vrijednost, a ukoliko tražena vrijednost ne postoji vraća se False.

Primijetite uvjet koji se nalazi u if strukturi :

($nadeni=array_search ($str_trazeni,$arr_mailovi) or $nadeni===0)

Prvo u varijablu $nadeni spremamo rezultat traženja. U nju će se spremiti indeks na kojem je pronađena vrijednost ili False. Drugi uvjet provjerava da li je ta vrijednost slučajno broj 0. Ovo je potrebno zato što ukoliko se tražena vrijednost nalazi na indeksu 0 if struktuta taj rezultat tretira kao False i obavlja se else grana if-a. Znači da bi se bez drugog uvjeta nulti elemnt niza zanemarivao pri pretraživanju. Uvjet $nadeni===0 provjerava da li je rezultat funkcije broj nula ili vrijednost false. Ukoliko je broj nula ipak će se obaviti true grana if-a i ovime je zagarantirana točnost pretraživanja.

Ali naš niz sadrži dvije iste vrijednosti na indeksima 0 i 2. Prijašnji kod neće pretražiti cijeli niz već će stati nakon prvog pronalaženja.

Da bi pretražili cijeli niz očito je da je potrebno koristiti neku ponavljačku petlju.

//pretraživanje cijelog niza i ispis svih indeksa - FALICNO

while ($nadeni=array_search ($str_trazeni,$arr_mailovi) or $nadeni===0){

echo "Prona?eno na poziciji : $nadeni => $arr_mailovi[$nadeni]<br>";

unset ($arr_mailovi[$nadeni]);

}

Za ovaj slučaj while petlja je vrlo praktična. Ona će se ponavljati sve dok u nizu postoji tražena vrijednost. Ako se pitate kako se petlja neće ponavljati u beskonačnost zato što je u prošlom primjeru rečeno da se ona zaustavlja nakon pronalaska prvog pojavljivanja, dobro se pitate. Naime, petlja će uvijek pronaći samo prvo pojavljivanje i vrtiti će se u beskonačnost. Da bi izbjegli ovo ponavljanje potrebno je nakon što pronađemo traženu vrijednost nju i izbaciti iz niza tako da slijedeće ponavljanje petlje pretražuje ostatak niza.

Element iz niza se izbacuje unset($var) funkcijom.

Funkcija unset() uništava danu varijablu. Nju se više ne može kasnije koristiti u skripti. Ukoliko je potrebno izbaciti samo jedan element niza funkciji dajemo taj niz sa željenim indeksom ($arr_niz[16]) i on će biti izbačen.

U primjeru se element izbacuje ovim redom

unset ($arr_mailovi[$nadeni]);

Ova metoda je falična zato što nakon što pretražimo niz u njemu se neće nalaziti pronađene vrijednsoti, pa ih se time ne može koristiti kasnije u skripti. Ovo se može izbjeći korištenjem funkcije koja će obaviti traženje što je objašnjeno u slijedećem primjeru

 

Primjer 27b : Pretraživanje niza sa više pojavljivanja tražene vrijednosti

 

<?

// traženje ponovljenih vrijednosti pomoau funkcije

function trazi($vrijednost,$niz){

while ($nadeni=array_search ($vrijednost,$niz) or $nadeni===0){

echo "Prona?eno na poziciji : $nadeni => $niz[$nadeni]<br>";

unset ($niz[$nadeni]);

}

}

// provjeranje postojanja tražene vrijednosti u nizu

if (in_array($str_trazeni,$arr_mailovi)){

trazi($str_trazeni,$arr_mailovi);

} else {

echo "U nizu ne postoji trazena vrijednost";

}

?>


Objašnjenje:

U ovom primjeru prije ispisivanja prvo provjeravamo da li u nizu postoje tražene vrijednosti. Postojanje vrijednosti u nizu se provjerava funkcijom in_array($str_trazeni,$str_niz_pretrazivanje).

Funkcija vraća True ukoliko vrijednost postoji,a false u suprotnom. Struktura argumenata funckije je identična i array_search() funkciji, pa i ova također prima treću, neobavezni, argument za uspoređivanje tipa podataka.

Prednost ove metode nad one bez korištenja funkcije je ta što kada predamo niz funkciji ona stvara lokalne (funkcijske) varijable za svoje argumente, te izbacivanje elemenata iz niza ne utječe na sadržaj predanog niza iz glavnog programa te taj niz možemo opet naknadno koristiti u skripti.

Primjer 28: Sortiranje niza

Postoji mnogo raznih algoritama za sortiranje niza i u ovom primjeru će biti objašnjeni samo neki od njih. Isto tako PHP je opremljen već gotovim funkcijama za sortiranje po indexu ili vrijednosti jednodimenzionalnih i multidimenzionalnih nizova.

 

<?

$arr_niz=array(

0=>10,

1=>15,

2=>9,

3=>19,

4=>13,

5=>15,

6=>99,

7=>74

);

// sortiranje niza

asort($arr_niz);

print_r($arr_niz);

?><hr><?

arsort($arr_niz);

print_r($arr_niz);

?><hr><?

ksort($arr_niz);

print_r($arr_niz);

?><hr><?

krsort($arr_niz);

print_r($arr_niz);

?>


U ovom vrlo jednostavnom primjeru se zadani niz sortira po raznim uvjetima.

U prvom slučaju niz je sortiran po vrijednostima niza uzlazno. Za sortiranje je korištena funkcija asort($arr_niz)

Njoj se kao argument daje niz koji se sortira. Funkcija ne vraća vrijednost, već samo sortira niz, i nakon njenog izvršenja je zadani niz sortiran i takvom mu pristupamo kasnije u skripti. Sortiranje se obavlja tako da se elementi niza sortiraju uzlazno. Ono što je bitno kod ove funkcije je da se održava odnos indeks => vrijednost, tako da će nakon sortiranja vrijednost koja se nalazila na indeksu 3 i dalje biti na tom indeksu, samo će njena pozicija u samom nizu možda biti drugačija.

U drugom slučaju niz se sortira silazno (od najveće prema najmanjoj vrijednosti). To se radi pomoću funkcije arsort($arr_niz). Ova funkcija je identična asort() funkciji po svom osobinama osim po redoslijedu elemenata nakon sortiranja.

U trećem slučaju niz se sortira po ključu. Znači da će ključ (indeks) sa manjom vrijednosti biti prije u nizu pošto funkcija ksort($arr_niz) sortira niz po indeksu uzlazno. Odnos indeks => vrijednost je zadržan nakon sortiranja.

Zadnji slučaj sortira niz po indesku, ali silazno. Tu radnju obavlja funkcija krsort($arr_niz). Ona je identična funkciji ksort(), samo što sortira niz obrnutim redosljedom

Zadaci:

1.Napisati skriptu koja će pretraživati postojanje elemenata jednog niza u drugom nizu. Skripta treba izbaciti sve pronađene vrijednosti u drugom nizu, a u prvom nizu treba naznačiti da je vrijednost pronađena te ispisati oba niza.

2.Napisati funkciju koja će pretraživati multidimenzionalni niz i vratit će točan indeks svih dimenzija do mjesta na kojem je pronađena vrijednost. Vraćena vrijednost je također niz u kojem svaki indeks označava dubinu (dimeziju). Npr. za pronađenu vrijednost na dimenziji $arr_niz[0][2][5] rezultat treba biti $arr_rezultat[0]=0, $arr_rezultat[1]=2, $arr_rezultat[2]=5.

3.Napisati skriptu koja će ispisati samo one elemente koji u sebi sadrže niz nakova ABC
 



PHP
 © 2004 - 2008 php.com.hr