Na ravni PHP je niz urejen seznam, ki je preslikan na zemljevid. Z drugimi besedami, PHP preprosto združuje ta dva pojma, kar ima za posledico dokaj prilagodljivo, vendar po drugi strani ne najbolj optimalno podatkovno strukturo v primerjavi s podobnimi možnostmi.
Le malo ljudi ve, da na ravni C (in dejansko na sistemski ravni) ni nizov, ki bi lahko imeli neomejeno velikost. Torej, če boste ustvarili matriko v C, boste zagotovo morali določiti njeno velikost, da bo sistem lahko določil, koliko prostega prostora morate dodeliti.
V PHP-u razvrščanje matrike še zdaleč ni enako kot v drugih shrambah podatkov, tukaj je urejeno preslikavanje, ki določa ujemanje med ključem in določeno vrednostjo. Ta vrsta matrike je optimizirana v več različnih smereh, kar vam omogoča, da jo aktivno uporabljate neposredno kot matriko, kot tudi slovar, predavanje, razpršeno tabelo in tudi za številne druge namene po vaši presoji. Treba je opozoriti, da je v primeru PHP vrednost v matriki lahko še ena podobna matrika. To vam omogoča oblikovanje dreves in večdimenzionalno shranjevanje.
Med značilnostmi tega skladišča je omeniti, kako enostavno je odstraniti matriko v PHP-ju. V tem primeru je postopek precej enostavnejši kot v podobnih sistemih datotek.
Če boste ustvarili popolnoma prazno polje, bo v tem primeru PHP polje ustvarjeno z določeno velikostjo. Če je ta nosilec zapolnjen in se nato odločite preseči to velikost, bo ustvarjena popolnoma nova matrika, ki bo imela volumen dvakrat večji od obstoječega in vsi podatki bodo kopirani v njo, medtem ko bo staro polje popolnoma uničeno. Ta pristop je standarden.
Pravzaprav se za izvajanje niza PHP uporablja tradicionalna podatkovna struktura, imenovana tabela Hash. Ta struktura vključuje kazalec na zadnjo in prvo vrednost, ki je potrebna za naročanje nizov, kot tudi kazalec na trenutno vrednost, ki se uporablja za zagotavljanje iteracije po matriki. Poleg tega tabela Hash vsebuje število elementov, shranjenih v array, array kazalci na vedro in drugi pomembni podatki.
Hash tabela ima dve pomembni lastnosti - to je podatkovna struktura sama, kot tudi Bucket (vedro).
Vrstice shranjujejo vrednosti same, kar pomeni, da ima vsaka od njih svoje vedro, poleg tega pa vsebuje tudi izvirni ključ, kot tudi različne kazalce na prejšnje ali naslednje segmente, ki se uporabljajo za organiziranje ustvarjenega niza, kot v PHP-ju. Tipke lahko gredo v drugačnem vrstnem redu, glede na želje uporabnika.
Če želite v polje dodati nov element, vendar ta ključ še ni, bo pod njim avtomatsko ustvarjeno novo vedro, ki bo dodano v tabelo Hash. V tem primeru morate pravilno razumeti, kako bo večdimenzionalni niz PHP shranil ta segment.
Kot je bilo omenjeno zgoraj, ima sistem specializirano paleto kazalcev na vedra, pri čemer ima vsaka skupina dostop do določenega indeksa, ki se določi s pomočjo ključa. Zveni pogosto precej težko, v resnici pa je vse nekoliko preprostejše, kot se zdi. Tako lahko ključ dobimo na naslednji način:
O maski: na primer, podatkovna matrika vsebuje štiri različne elemente, nato pa bo maska enaka tri. Sedaj, če kot ključ dobite številko, kot je 123, potem boste v tem primeru po uporabi maske prejeli 3 in to številko lahko že uporabite kot indeks.
Žlice imajo nekaj pomembnih značilnosti, ki jih je treba poznati. Vsaka skupina ima kazalec na naslednji in prejšnji, z enakimi indeksi. Tako poleg glavnega dvojno povezanega seznama, ki poteka skozi vse uporabljene segmente, obstajajo tudi dva majhna dvojno povezana seznama med vedri, ki imata enak indeks.
Kar se zgodi, ko je uporabljena matrika popolnoma polna, se imenuje rehash med strokovnjaki. V bistvu gre za iteracijo nad vsemi uporabljenimi vedri, kot tudi za dodeljevanje njihovih sosedov in dodajanje povezav do njih.
Postopek je sprva enak kot v primeru pridobitve ključa, v tem primeru pa se nadaljuje:
Takšna dejanja je treba ponoviti, dokler žlice niso popolnoma izločene iz pNext ali dokler ne najdete ujemanja, ki vas zanima.
Treba je omeniti, da je večdimenzionalna matrika PHP skoraj v celoti zgrajena na eni sami strukturi HashTable, saj so vse spremenljivke, ki so v določenem obsegu, dejansko v tej podatkovni strukturi, raztrgane kot metode, polja in definicije razredov. Poleg tega ta struktura podatkov omogoča, da dosežemo skoraj enako hitrost vseh operacij in jih hkrati bistveno poenostavimo.
Matriko se ustvari z uporabo matrike konstrukta jezika, ki lahko sprejme parametre poljubnega števila ključev => pari vrednosti, ločenih z vejicami.
Ključ v tem primeru je lahko niz ali celo število. Če je ključ standardno število, bo v tem primeru razloženo, medtem ko bo float obrezan na to obliko. Treba je omeniti, da pri PHP razvrščanje matrike ne zagotavlja nobene razlike med asociativnimi in indeksnimi nizi, kar pomeni, da obstaja samo ena vrsta pomnilnika, ki vsebuje tako nizove kot številčne indekse.
Za normalno delo z nizi je na voljo dovolj veliko število različnih funkcij, vendar jih vsi ne poznajo in jih lahko uporabljajo. Posebno pozornost je treba nameniti takšni funkciji, kot je unset, ki vam omogoča, da popolnoma odstranite ključe, ki jih ima element PHP v PHP. Če želite izvesti dejanje v slogu »odstrani in premakni«, se lahko polje ponovno indeksira z vrednostmi array.
Nadzorna struktura je bila posebej ustvarjena za delo z nizi. Ta funkcija se uporablja za preprosto pregledovanje vsebine matrike in interakcijo s podatki.
Pri razglasitvi indeksiranega PHP niza, potem ko je ime spremenljivke nastavljeno, je nastavljen tudi par oglatih oklepajev, v katerem je položaj dane matrike označen neposredno. Obstaja tudi nekaj osnovnih ukazov, ki jih morate vedeti pri ustvarjanju tega polja:
V vsakem primeru mora biti literalni zapis niza zaprt v narekovajih v indeksu asociativnega polja. Pogosto lahko najdemo skladnjo v starih skriptih, v kateri ni nobenih narekovajev, in to lahko dejansko deluje, čeprav je napačno. V tem primeru je razlog ta, da ta koda vsebuje nedoločeno konstanto namesto niza, zaradi česar je v PHP-ju izhod matrike lahko takšen, da se lahko "goli črti" samodejno pretvorijo v celoten niz z ustrezno vrednostjo. Z drugimi besedami, če na začetku ni bilo mogoče določiti konstante, potem bo PHP sam dodal narekovaje in nato pravilno uporabil vneseni niz.
Opozoriti je treba, da ključev v narekovajih ni vedno treba priložiti. Na primer, ni treba vključiti spremenljivk ali konstant v narekovajih, ker je v tem primeru lahko izhod matrike v PHP-ju napačen in ti ukazi bodo nepravilno obdelani.
Če se bo razvojni tim PHP v prihodnje odločil dodati novo ključno besedo ali dodatno konstanto, boste morda imeli težave. Enako velja za situacijo, če konstanto iz druge kode moti vaš niz. Na primer, morda ne boste mogli uporabljati besed, kot je privzeto, in prazne, ker so to rezervirani ključi.
Za katerokoli vrsto ključev, pretvorba vrednosti v PHP polja, katerih funkcije sam izbere uporabnik, na koncu zagotavlja možnost, da se pridobi polje z enim elementom, ki ima skalarno vrednost.
Če se odločite za pretvorbo objekta v polje, bodo v tem primeru lastnosti tega objekta uporabljene kot elementi tega polja. Ko se odločite, kako boste izpisali matriko v PHP, bodo imena lastnosti objekta z določenimi izjemami uporabljena kot ključi:
Vse te dodane vrednosti imajo na obeh straneh nič bajtov, kar lahko pogosto povzroči nekoliko nepričakovano obnašanje matrike za njegovega lastnika.
Kot lahko vidite, je uporaba takšnih nizov izjemno preprosta za napredne uporabnike, še pomembneje pa je, da so zelo priročni pri njihovi uporabi. Nobenega velikega projekta ni mogoče zamisliti brez uporabe različnih tipov nizov, hkrati pa smo poskušali upoštevati le določen del značilnosti in razpoložljivih funkcij takih sistemov, ne da bi se spuščali v kakršne koli razpoznavnosti, kako jih lahko uporabimo v različnih situacijah.