Rad sa nizovima | - Core PHP Programming (2024)

Kurs: - Core PHP Programming

Modul: Nizovi

Autor: Vladimir Marić

Naziv jedinice: Rad sa nizovima

Materijali vezani uz ovu lekciju:

- Test rad sa nizovima
- Rad sa nizovima (PDF dokument)


Numerisani i asocijativni nizovi

Za razliku od promenljivih, koje čuvaju pojedinačne vrednosti, nizovi se koriste za čuvanje skupa ili sekvence vrednosti. Svaki niz se sastoji od dva dela, indeksa i elementa. Indeks niza se koristi za identifikaciju i pristup elementu.

Niz u PHP-u može da bude kreiran na nekoliko načina. Jedan od njih je da se svakom elementu pojedinačno dodeli vrednost. Na primer:

$klijent[1]="Nikola Nikolic";
$klijent[2]="Petar Petrovic";
$klijent[3]="Djordje Djordjevic";

Na ovaj način je definisan niz $klijent koji ima tri elementa numerisana brojevima počevši od broja 1. Nizovi indeksirani brojevima nazivaju se numerisani nizovi.

Elementi nizova mogu da budu indeksirani i pomoću stringova. Ovako indeksirani nizovi se nazivaju asocijativni nizovi. Na primer:

$grad['BG']="Beograd";
$grad['NS']="Novi Sad";
$grad['KG']="Kragujevac";

Ukoliko koristite sledeće naredbe:

$grad[]="Beograd";
$grad[]="Novi Sad";
$grad[]="Kragujevac";

tada će biti kreiran niz od tri elementa, pri čemu su elementi numerisani automatski brojevima počevši od broja 0. Indeksiranje brojevima počevši od 0 je podrazumevan način indeksiranja u PHP-u, ukoliko eksplicitno ne navedete drugačije.

Niz može biti kreiran i korišćenjem funkcije array(), na jedan od sledećih načina:

$grad = array ( "Beograd","Novi Sad","Kragujevac");
$grad = array ( 12 => "Beograd","Novi Sad","Kragujevac");
$grad = array ( "BG" => "Beograd", "NS" => "Novi Sad","KG" => "Kragujevac" );

Prva naredba kreira niz od tri elementa indeksiranih brojevima 0, 1 i 2. Druga naredba kreira niz čiji su elementi indeksirani brojevima 12, 13 i 14. Trećom naredbom se kreira niz i elementima se dodeljuju stringovi za indekse.

Svi do sada navedeni načini kreiranja nizova podrazumevaju da programer mora da navede vrednosti svakog elementa niza. Ponekad je to potpuno nepraktično i nepotrebno. Na primer, ukoliko želimo da u jednom nizu čuvamo brojeve od 1901 do 2000, dovoljno je da koristimo naredbu range() na sledeći način:

$dvadesetiVek = range(1901, 2000);

Ovom naredbom kreiran je niz od sto elemenata čije su vrednosti redom brojevi od 1901 do 2000. Ovi elementi su indeksirani automatski indeksima od 0 do 99.
Kada je niz jednom kreiran, njegovim elementima se pristupa preko njihovih indeksa. Svaki element niza se koristi u kodu kao i bilo koja druga promenljiva.

<html>
<head>
<title>Nizovi</title>
</head>
<body>
<p>
<?php

$boje = array('crvena', 'zelena', 'plava');
echo "Prva boja u nizu je " . $boje[0] . "<br>";
echo "Druga boja u nizu je " . $boje[1] . "<br>";
echo "Treca boja u nizu je " . $boje[2] . "<br>";
?>
</p>
</body>
</html>

Promenljiva $boje[0] odgovara prvom elementu niza i ima vrednost 'crvena'. Izlaz prethodnog koda će biti

Prva boja u nizu je crvena
Druga boja u nizu je zelena
Treca boja u nizu je plava

Indeksi su automatski dodeljeni elementima niza prilikom njegovog kreiranja, pri čemu prvi element ima indeks 0.

Nekada je potrebno nakon što je niz kreiran ukloniti neki od njegovih elemenata. Ovo se postiže naredbom unset(). Na primer, unset($klijent[2]) će ukloniti drugi element iz niza kreiranog u prvom primeru. Niz klijent će se tada sastojati samo od elemenata $klijent[1] i $klijent[3]. Obratite pažnju da se uklanjanjem jednog elementa niza ne menjaju indeksi ostalih.


Funkcije za rad sa nizovima

PHP sadrži veliki broj funkcija za rad sa nizovima. Korišćenje ovih funkcija olakšava rad sa podacima i pisanje koda. Takođe, i većina "običnih" funkcija kada se primeni na niz daje drugačije rezultate nego kada se primeni na običnu promenljivu.

count(), sizeof()
Obe funkcije kao vrednost vraćaju broj elemenata niza.

sort(), asort(), rsort(), ksort(), krsort()
Ove funkcije se koriste za sortiranje elemenata niza. PHP originalno čuva elemente niza u onom redosledu u kome su i kreirani, ali je zato moguće pomoću funkcija sortiranja urediti niz u redosledu u kome želite.
Funkcija sort() uređuje niz u rastućem redosledu u odnosu na vrednosti elemenata, pri čemu se vrši ponovno indeksiranje. Pogledajte sledeći niz:

$grad[0]="Beograd";
$grad[1]="Novi Sad";
$grad[2]="Kragujevac";

Nakon naredbe sort($grad), niz $grad će imati sledeće elemente

$grad[0]="Beograd";
$grad[1]="Kragujevac";
$grad[2]="Novi Sad";

Elementi su sortirani po abecedi, pa su tako gradovi Kragujevac i Novi Sad zamenili mesta. Ukoliko koristite naredbu sort() za asocijativne nizove, elementima se prvo dodele brojevi kao indeksi, niz se sortira, a zatim se elementima ponovo vrate stari indeksi. Ovo praktično znači da naredba sort() menja raspored samo vrednostima elemenata, a ne i indeksima.

Ukoliko želite da sortirate asocijativni niz, a da pri tome svaki element zadrži postojeći indeks, koristite funkciju asort(). Funkcija rsort() uređuje niz u opadajućem redosledu. Funkcija ksort() uređuje niz prema indeksima u rastućem, a funkcija krsort() u opadajućem redosledu.

shuffle()
Koristi se za proizvoljno raspoređivanje elemenata niza


array_slice($imeNiza, pozicija, duzina)
U PHP-u je moguće kreirati novi niz kao podskup nekog već postojećeg pomoću funkcije array_slice(). Na primer:

$testarray = array( "red", "green", "blue","pink");
$subArray = array_slice($testarray,1,2);

Novi niz $subArray će sadržati dva elementa niza $testArray i to počevši od onog sa indeksom 1, tj.

[0] => green
[1] => blue

array_merge($imeNiza1, $imeNiza2)
Ova funkcija vam omogućava da dva niza spojite u jedan. Na primer, sledeće naredbe

$array1 = array("red","blue");
$array2 = array("green","yellow");
$bigArray = array_merge($array1,$array2);

će kreirati niz $bigArray sa sledećim elementima:

$bigArray[0] = red
$bigArray[1] = blue
$bigArray[2] = green
$bigArray[3] = yellow

Prilikom korišćenja ove funkcije za spajanje dva asocijativna niza treba voditi računa o tome da u tim nizovima nema elemenata sa istim indeksom. Ukoliko dva elementa imaju isti string indeks, drugi od njih će biti prekopiran preko prvog.

U kodu koji sledi demonstrirana je upotreba gore navedenih funkcija.


<html>
<head>
<title>Nizovi</title>
</head>
<body>
<p>
<?php

//Kreiranje dva niza
$numbers = array(50,20,18,30,10,7);
$colors = array('red', 'blue', 'green')

// utvrđivanje veličine niza
$array_size = sizeof($numbers);

// sortiranje elemenata – niz postaje array(7,10,18,20,30,50)
sort($numbers);

// spajanjem dva niza dobija se array(7,10,18,20,30,50,'red','blue','green')
$merged_array = array_merge($numbers,$colors);

// brojevi 18 i 20 se ubacuju u novi niz
$slice = array_slice($numbers, 2, 2);
?>
</p>
</body>
</html>


explode(), implode()
Ove dve funkcije se koriste za konvertovanje stringa u niz i obrnuto.
Funkcija explode() ima sledeću sintaksu

$imeNiza = explode("znak", string)

Prvi argument ove funkcije (znak) određuje karakter koji će biti korišćen za razdvajanje stringa. Drugi argument je tekst koji se deli na delove. Svaki deo postaje jedan element niza.

Slično, moguće je elemente niza spojiti u string pomoću funkcije implode():

$tekst = implode("znak", $imeNiza)

array_diff($niz1, $niz2, ...)
Ova funkcija identifikuje elemente u navedenim nizovima koji se razlikuju.

array_sum()
Ova funkcija sabira vrednosti koje su elementi niza

array_unique()
Pomoću ove funkcije moguće je ukloniti iste elemente jednog niza.

Vežba 1

Problem:

Definisan je sledeći niz:

$arr = array(2,5,1,7,4,3,8);


Potrebno je napraviti aplikaciju koja će sortirati ovaj niz tako da vrednosti budu poređane od manje ka većoj.

Potrebno je prikazati sortirani niz na izlazu.


Rešenje:

Ovo rešenje podrazumeva selection sort algoritam, ali je moguće upotrebiti i različite druge algoritme sortiranja.

<?php
$arr = array(2,5,1,7,4,3,8);
for($i=0;$i<sizeof($arr);$i++)
{
$min = $i;
for($u=$i;$u<sizeof($arr);$u++)
{
if($arr[$u]<$arr[$min])
$min=$u;
}
$tmp=$arr[$i];
$arr[$i]=$arr[$min];
$arr[$min]=$tmp;
}
print_r($arr);
?>

Vežba 2

Problem:

Dat je niz:

$arr = array(0,1,2,3,4,5,6,7,8);


Potrebno je napraviti kod koji će prikazati svakog člana niza pomnoženog sa prethodnim članom niza.

0
0
2
6
12
20
30
42
56


Rešenje:

<?php
$arr = array(0,1,2,3,4,5,6,7,8);
for($i=0;$i<sizeof($arr);$i++)
{
if($i>0)
echo $arr[$i]*$arr[$i-1]."<br>";
else
echo $arr[$i]."<br>";
}
?>

Vežba 3

Problem:

Data je sledeća promenljiva:

$lipsum = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.";


Potrebno je napraviti program koji će prebrojati tačan broj svake reči u ovom stringu i emitovati rezultat na izlaz u sledećem formatu:

Lorem : 4
Ipsum : 3
is : 1
simply : 1
dummy : 2
text : 2
of : 4


Rešenje:

<?php
$lipsum = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.";
$arr = explode(" ",$lipsum);
$words = array();
$counts = array();
for($i=0;$i<sizeof($arr);$i++)
{
if(!in_array($arr[$i],$words))
{
$words[]=$arr[$i];
$counts[]=1;
}
else
{
for($u=0;$u<sizeof($words);$u++)
if($words[$u]==$arr[$i])
$counts[$u]++;
}
}
for($i=0;$i<sizeof($words);$i++)
echo($words[$i] . " : " . $counts[$i] . "<br>");
?>

Smatrate da je ova lekcija korisna?Preporučite je.Broj preporuka:7
Rad sa nizovima  | - Core PHP Programming (2024)

References

Top Articles
Latest Posts
Recommended Articles
Article information

Author: Sen. Emmett Berge

Last Updated:

Views: 5693

Rating: 5 / 5 (80 voted)

Reviews: 87% of readers found this page helpful

Author information

Name: Sen. Emmett Berge

Birthday: 1993-06-17

Address: 787 Elvis Divide, Port Brice, OH 24507-6802

Phone: +9779049645255

Job: Senior Healthcare Specialist

Hobby: Cycling, Model building, Kitesurfing, Origami, Lapidary, Dance, Basketball

Introduction: My name is Sen. Emmett Berge, I am a funny, vast, charming, courageous, enthusiastic, jolly, famous person who loves writing and wants to share my knowledge and understanding with you.