Programmering er syntaks og semantikk.Den første bestemmes av reglene i språket, den andre - av utviklerens erfaring. Med hensyn til matriser kan utvikleren underkaste syntaksen for semantikk. Det er ennå ikke et objekt, men det er ikke lenger en matrise i tradisjonell forstand. PHP gjør det mulig å lage matriser fra variabler av forskjellige typer, inkludert seg selv. Et element i en matrise kan være en funksjon, det vil si evnen til å laste en matrise med en reell algoritme, reell betydning.
Syntaksen er stabil, men endres fra versjon tilversjoner og er kanskje ikke alltid kompatible oppover. Programportabilitet er en glemt prestasjon fra forrige århundre. Semantikk utvikler seg og kan alltid brukes ikke bare i hvilken som helst versjon av hvilket som helst språk; det har blitt en tradisjon å bruke syntaktiske konstruksjoner for å uttrykke hva reglene i språket ikke engang var bestemt for. Ved å bruke arrays som et eksempel, kan dette forstås enklest.
Konstruere matriser
PHP-arrays har praktisk syntaks og funksjonalitet. Denne datatypen kan beskrives på forhånd, men det er ofte praktisk å lage matriser i farta etter behov.
offentlig $ aNone = array (); // matrisen er beskrevet og inneholder ingenting
offentlig $ aFact = array ("avokado", "fersken", "kirsebær"); // denne matrisen har tre elementer
Opprettelse av en matrise i ferd med å sjekke noen tilstand:
$ cSrcLine = "analysert datalinje";
for ($ i = 0; $ i <13; $ i ++) {
$ cUserLine = inputUserLine (); // legge inn noe
hvis (checkFunc ($ cSrcLine, $ cUserLine) {
$ aResult [] = "Ja"; // legg til PHP-array
} annet {
$ aResult [] = "Nei";
}
}
Som et resultat av å utføre dette eksemplet,en matrise med 13 elementer, hvis verdier bare er strengene "Ja" eller "Nei". Elementene vil motta indekser fra 0 til 12. Den samme effekten kan oppnås ved først å skrive den "fremtidige" PHP-matrisen til en streng:
$ cFutureArray = "";
for ($ i = 0; $ i <13; $ i ++) {
$ cUserLine = inputUserLine (); // legge inn noe
hvis ($ i> 0) {$ cFutureArray. = "|"; }
hvis (checkFunc ($ cSrcLine, $ cUserLine) {$ cFutureArray. = "Ja";
} annet {$ cFutureArray. = "Nei"; }
}
$ aResult = eksplodere ("|", $ cFutureArray);
Flerdimensjonale matriser
Mange nettstedsadministrasjonssystemer (SMS)bruk arrays "på en stor måte". På den ene siden er dette god praksis, på den andre siden gjør det det vanskelig å søke. Selv om forfatteren forstår doktrinen om PHP-array-in-array, bør den ikke misbrukes: ikke bare utvikleren må venne seg til den komplekse notasjonen. Ofte etter en stund vil skaperen selv huske lenge hva han skrev først:
retur matrise (
"view_manager" => array (41, "template_path_stack" => array (__DIR__. "/../view",),
"router" => array ("routes" => array ("sayhello" => array (
"type" => "ZendMvcRouterHttpLiteral",
"options" => array ("route" => "/ sayhello", "defaults" => array (
"controller" => "HelloworldControllerIndex", "action" => "index",)))),
"controllers" => array ("invokables" => array (
"HelloworldControllerIndex" => "HelloworldControllerIndexController"))
);
Dette er PHP Array in Array Sample Practice av ZF2. Ikke veldig inspirerende i begynnelsen, men det fungerer og sannsynligvis gjør dette rammeverket til en suksess (eksempel fra ZendSkeletonApplication / module / Helloworld / config / module.config.php module).
Array er en viktig datakonstruksjon underdesign og utvikling. Den flerdimensjonale versjonen var en gang populær, men over tid er det fortsatt behov for matriser på maksimalt to eller tre dimensjoner. Dette er enklere og tydeligere, men fra et profesjonelt synspunkt, når noe begynner å formere seg, betyr det at noe er galt i problemstillingen eller i koden.
Enkelt, tilgjengelig og forståelig
Ved å lage i php er en matrise i en matrise bestvære begrenset til to eller tre nivåer. Til tross for stabilitet og pålitelighet gjør PHP feil når man behandler syntaksen. Du kan takle dette med en god kodeditor, som er vant til å telle parenteser og komma nøyaktig. Imidlertid kontrollerer PHP ikke datatyper (dette er karmaen til moderne programmering) og lar utvikleren praktisere semantiske feil.
En regel for å kontrollere typer variabler, elleregne ideer om å gjøre semantikk til syntaks er ofte en uakseptabel luksus. Dette er et tap av skripthastighet, kodelesbarhet, ... derfor er enkel koding alltid viktig.
PHP har en betydelig ulempe:når det er usikkerhet, henger manuset rett og slett. Ikke alle debuggere håndterer beredskaper, og mye avhenger av utviklerens erfaring og intuisjon. Jo enklere algoritmen er, jo mer tilgjengelig den strukturerte informasjonen er, desto større er sjansen for å finne en feil eller ikke innrømme den i det hele tatt.
Det er karakteristisk at når de første gruppene dukket opp,det er foreslått varianter av data i form av strukturer - et klønete forsøk på å lage noe fra forskjellige typer data. Førstnevnte overlevde og fikk en ny effektiv syntaks, mens sistnevnte er historie.
Enkle og assosiative matriser
Å skrive et todimensjonalt array er et annet parparentes "[" og "]", for eksempel: $ aSrcData [1] [2] betyr henvisning til element [2] i array [1] inkludert i array $ aSrcData. Det er ikke noe krav i PHP om å erklære data på forhånd. Eventuell erklært informasjon kan alltid kontrolleres for eksistens.
Det er veldig effektivt å lage noe bare hvisnår det er behov for det, i den form det ble krevd, og å ødelegge når behovet for det har forsvunnet. Ved å bruke fornuftige navn som nøkler (indekser), kan du få lesbare konstruksjoner som er meningsfulle i sammenheng med det gjeldende stedet i algoritmen:
$ aAnketa ["name"] = "Ivanov";
$ aAnketa ["age"] = 42;
$ aAnketa ["work"] = "Regissør";
$ aAnketa ["active"] = true;
$ aTable [] = $ aAnketa;
$ aAnketa ["name"] = "Petrov";
$ aAnketa ["age"] = 34;
$ aAnketa ["work"] = "Manager";
$ aAnketa ["active"] = true;
$ aTable [] = $ aAnketa;
$ aAnketa ["name"] = "Afanasiev";
$ aAnketa ["age"] = 28;
$ aAnketa ["work"] = "Arbeider";
$ aAnketa ["aktiv"] = usann;
$ aTable [] = $ aAnketa;
$ sOne. = implode (";", $ aTable [1]). "<br/>"; // andre PHP-array til streng
$ sOne. = $ aTable [1] ["arbeid"]; // tilgang til ett element i den andre matrisen
Resultatet av dette eksemplet (den første matrisen er normal, tastene i den starter fra 0, den andre matrisen er assosiativ, den har fire nøkler: "navn", "alder", "arbeid", "aktiv"):
$ sOne = "Petrov; 34; Manager; 1 <br/> Manager";
I dette enkle eksemplet kan du se hvordanden opprettede profilen kan brukes på alle ansatte. Du kan opprette en rekke ansatte med indekser etter personnummer, og hvis du trenger en bestemt ansatt, velg ham etter personnummer.
Hvis organisasjonen har avdelinger, eller det er detsesongarbeidere, eller trenger å skille ut arbeidende pensjonister ... PHP-arrayet i array-konstruksjonen er veldig nyttig, men du bør aldri la deg rive med dimensjonaliteten. To eller tre dimensjoner er grensen for en effektiv løsning.
Taster for å jobbe med matriser
Hvis det før gjaldt hvordan alt fungerte, daI de siste årene ble tradisjonene fra den binære æra, da en programmerer ønsket å vite nøyaktig hvordan elementene i en matrise ble lagret, og ønsket å ha direkte tilgang til dem, helt glemt. Det er mange tegnkodinger som tar mer enn en byte i minnet. Ordet "bit" kan nå bare finnes i bitsøkoperasjoner, men å søke i en PHP-matrise er et eget emne. Elementtilgang kan være enkel og assosiativ. I det første tilfellet er elementene i matrisen (som har noen av typene tilgjengelig i PHP) nummerert 0, 1, 2, ... I det andre tilfellet spesifiserer programmereren sin egen indeks, ofte kalt "nøkkelen" til få tilgang til ønsket verdi.
$ aLine ["fruit"] = "oransje"; // her PHP array-nøkkel = "frukt"
eller (slik at alt stemmer, observerer siden og kodekodingen):
$ aLine [iconv ("utf-8", "CP1251", "fruit")] = iconv ("utf-8", "CP1251", "orange");
Når du legger til en ny verdi i $ aLine-arrayet:
$ aLine [] = iconv ("utf-8", "CP1251", "fersken");
$ aLine [iconv ("utf-8", "CP1251", "vegetabilsk")] = iconv ("utf-8", "CP1251", "agurk");
$ aLine [] = iconv ("utf-8", "CP1251", "aubergine");
som et resultat av løkkeutførelse:
foreach ($ aLine som $ ck => $ cv) {
$ cOne. = $ ck. "=". $ cv. "<br/>";
}
vil motta:
frukt = appelsin
0 = fersken
grønnsak = agurk
1 = aubergine
Når du legger til elementene "fersken" og "aubergine", dannes PHP-nøkkelen til matrisen sekvensielt fra 0, og når du spesifiserer verdien, vil den være lik denne verdien.
Fjerne elementer fra en matrise
Den enkleste måten er å fjerne et element i en PHP-array underbehandler den. I dette tilfellet, for eksempel, som et resultat av løkkeutførelse, blir den opprinnelige matrisen skannet og en ny en blir dannet, i hvilken unødvendige elementer ganske enkelt ikke skrives.
Du kan gjøre det lettere. Hvis vi bruker det siste eksemplet:
unset ($ aLine [0]); // fjern element fra PHP-array
så blir resultatet:
frukt = appelsin
grønnsak = agurk
1 = aubergine
Alternativer for å manipulere matriseelementermange kan konstrueres. For eksempel ved å bruke funksjonene: implode () og explode (), kan du skrive en PHP-matrise til en streng med en skilletegn, og analysere den tilbake til en annen matrise ved hjelp av en annen separator.
For å bare slette en hel matrise i PHP, er det bare å skrive: unset ($ aLine);
Det er nok.
Søk i en matrise
PHP inneholder spesielle søkefunksjonerarray_keys (), array_values (), array_key_exists () og in_array (), men før du bestemmer deg for å bruke dem, bør du vurdere å gjøre et PHP-array-søk selv.
Ethvert prosjekt har et bestemt fagområde,konstruerte matriser, spesielt når en del av semantikken har blitt overført til syntaksen og representert av et sett med veldig spesifikke meningsfulle nøkler. Dette lar deg utføre dine egne søkefunksjoner, som også kan merkes meningsfullt.
I PHP kan du ringe funksjoner hvis navn blir bestemt under programutførelse. Et veldig praktisk eksempel fra PHPWord-biblioteket som lar deg lese og opprette MS Word-dokumenter:
$ elements = array ("Text", "Inline", "TextRun", "Link", "PreserveText", "TextBreak",
"ListItem", "ListItemRun", "Table", "Image", "Object", "Footnote",
"Endnote", "CheckBox", "TextBox", "Field", "Line");
$ funksjoner = matrise ();
for ($ i = 0; $ i <count ($ elements); $ i ++) {
$ functions [$ i] = "legg til". $ elementer [$ i];
}
Som et resultat vil $ funksjonsmatrisen motta verdiene til $ elementmatrisen, det vil si navnene på virkelige funksjoner som utfører arbeid med virkelige elementer i dokumentet.
Ved å ringe $ funksjoner [4] på $ elementer [4], kan du få perfekt søk og raske resultater.
Sortering av varer
Oppgaven med å sortere dataene er viktig, ogPHP tilbyr flere funksjoner for dette: sort (), rsort (), asort (), ksort (), ... Stigende og synkende elementer, de to andre funksjonene bevarer forholdet mellom nøkler og verdier. Noen ganger er det fornuftig å blande rekkefølgen av verdiene tilfeldig - bland ().
Når du bruker PHP-funksjoner til å sortere, ikke gjør detglem at elementer kan ha ikke bare forskjellige typer, men også ikke helt naturlig innhold. Først og fremst må du være veldig forsiktig med å sortere strenger som inneholder russiske bokstaver, sorteringsdatoer, samt tall som er skrevet i forskjellige formater.
Den beste måten å skrive den perfekte løsningen selv, i det minste i testfasen av manuset, er ved manuell sortering. Hun vil bidra til å forutse uforutsette situasjoner.
Inline arrays
Takket være funksjonene implode () og explode (), matrisenkan enkelt forvandles til en streng og mottas tilbake. Dette lar deg lagre data i kompakt form og utvide dem til en praktisk tilstand etter behov.
En matrise omgjort til en streng åpner for nye muligheter. For eksempel krever oppgaven med å finne nøkkelord i teksten at funnet ikke blir lagt til igjen.
$ cSrcLine = "Tekst Tekst ListItemRun TextBox ListItem TextBox avkrysningsrute CheckBox TextBox Footnote";
$ aSrc = eksplodere ("", $ cSrcLine);
$ cDstLine = "";
for ($ i = 0; $ i <count ($ aSrc); $ i ++) {
$ cFind = "[". $ aSrc [$ i]. "]";
hvis (! is_integer (strpos ($ cDstLine, $ cFind))) {
$ cDstLine. = $ cFind;
}
}
$ aDst = eksplodere ("] [", $ cDstLine);
$ cOne = implode (";", $ aDst);
Som et resultat vil variabelen $ cOne bare motta de verdiene fra den opprinnelige strengen som forekommer der en gang: "Text; ListItemRun; TextBox; ListItem; Check; Box; CheckBox; Footnote".
Russisk språk i nøkler og verdier
Det anbefales ikke å bruke noe relatertmed nasjonale kodinger, i syntaktiske konstruksjoner. Det russiske språket, i likhet med alle andre språk hvis tegn går utover a-z, vil ikke skape problemer, det vil si å være i dataområdet, men ikke i syntaksen til koden. Noen ganger vil til og med en enkel PHP-oppgave "å skrive ut en matrise til en skriver eller en skjerm" føre til "krakozyabram", og oftere vil det bare stoppe skriptet.
PHP er et lojal språk og er tolerant overfornasjonale kodinger, men det er mange situasjoner når den fullførte mengden arbeid må utføres bare fordi på riktig sted og til rett tid dukker det opp en nøkkelverdi, som ikke vil være mulig å gjenkjenne.
PHP syntaks og språkmiljø
Det skal huskes at PHP-syntaks er en ting, menkonstruksjonene av denne syntaksen "håndterer" andre applikasjoner, med operativsystemet, med maskinvarealternativer. Det er mange alternativer, det er aldri mulig å forutse alt.
Regelen er "i koden er det bare koden, men ved inngangen,inne, og ved utgangen er det all informasjon ”vil bidra til å unngå uventede overraskelser. PHP-verdien i matrisen kan være "russisk", men nøkkelen til den må være syntaktisk korrekt, ikke bare fra synspunktet til det gitte språket, men også fra miljøets synspunkt.