Programmering är syntax och semantik.Det första bestäms av språkets regler, det andra bestäms av utvecklarens erfarenhet. När det gäller matriser kan utvecklaren utsätta syntaxen för semantik. Det är ännu inte ett objekt, men det är inte längre en matris i traditionell mening. PHP gör det möjligt att skapa matriser från variabler av olika typer, inklusive dem själva. Ett element i en array kan vara en funktion, det vill säga möjligheten att ladda en array med en verklig algoritm, verklig mening.
Syntaxen är stabil, men ändras från version tillversioner och kanske inte alltid är uppåtkompatibla. Programportabilitet är en bortglömd prestation under förra seklet. Semantik utvecklas och kan alltid tillämpas inte bara i någon version av något språk; det har blivit en tradition att använda syntaktiska konstruktioner för att uttrycka det som inte ens föreskrivs i språkreglerna. Med hjälp av matriser som ett exempel kan detta förstås enklast.
PHP -matriser har praktisk syntax och funktionalitet. Denna datatyp kan beskrivas i förväg, men det är ofta bekvämt att skapa arrays i farten efter behov.
public $ aNone = array (); // arrayen beskrivs och innehåller ingenting
public $ aFact = array ("avokado", "persika", "körsbär"); // denna matris har tre element
Skapande av en matris under kontroll av vissa villkor:
$ cSrcLine = "analyserad datarad";
för ($ i = 0; $ i <13; $ i ++) {
$ cUserLine = inputUserLine (); // mata in något
if (checkFunc ($ cSrcLine, $ cUserLine) {
$ aResult [] = "Ja"; // lägg till i PHP -array
} annat {
$ aResult [] = "Nej";
}
}
Som ett resultat av att detta exempel kördes,en uppsättning av 13 element, vars värden endast är strängarna "Ja" eller "Nej". Elementen kommer att få index från 0 till 12. Samma effekt kan uppnås genom att tidigare skriva "framtida" PHP -array i en sträng:
$ cFutureArray = "";
för ($ i = 0; $ i <13; $ i ++) {
$ cUserLine = inputUserLine (); // mata in något
if ($ i> 0) {$ cFutureArray. = "|"; }
if (checkFunc ($ cSrcLine, $ cUserLine) {$ cFutureArray. = "Ja";
} annat {$ cFutureArray. = "Nej"; }
}
$ aResult = explode ("|", $ cFutureArray);
Många webbplatshanteringssystem (SMS)använda matriser "på ett stort sätt". Å ena sidan är detta god praxis, å andra sidan gör det det svårt att applicera. Även om författaren förstår PHP-array-in-array-doktrinen bör den inte överanvändas: inte bara utvecklaren måste vänja sig vid den komplexa notationen. Ofta kommer skaparen själv efter ett tag att komma ihåg länge vad han skrev först:
returmatris (
"view_manager" => array (41, "template_path_stack" => array (__DIR__. "/../view",),
"router" => array ("routes" => array ("sayhello" => array (
"type" => "ZendMvcRouterHttpLiteral",
"options" => array ("route" => "/ sayhello", "default" => array (
"controller" => "HelloworldControllerIndex", "action" => "index",)))))),
"controllers" => array ("invokables" => array (
"HelloworldControllerIndex" => "HelloworldControllerIndexController"))
);
Detta är PHP Array in Array Sample Practice av ZF2. Inte särskilt inspirerande till en början, men det fungerar och gör förmodligen detta ramverk till en framgång (exempel från ZendSkeletonApplication / module / Helloworld / config / module.config.php -modul).
Array är en viktig datakonstruktion underdesign och utveckling. Dess flerdimensionella version var en gång populär, men med tiden finns det fortfarande ett behov av matriser med högst två eller tre dimensioner. Detta är enklare och mer begripligt, men ur professionalismens synvinkel, när något börjar föröka sig, betyder det att något är fel i problemmeddelandet eller i koden.
Genom att skapa i php är en matris i en array bästbegränsas till två eller tre nivåer. Trots stabiliteten och tillförlitligheten gör PHP misstag vid bearbetning av syntax. Du kan hålla ut med detta, med en bra kodredigerare, van vid att exakt räkna parenteser och kommatecken. PHP kontrollerar dock inte datatyper (detta är karma för modern programmering) och låter utvecklaren öva semantiska fel.
En regel för att styra typerna av variabler, elleregna idéer om att förvandla semantik till syntax är ofta en oacceptabel lyx. Detta är en förlust av skripthastighet, kodläsbarhet, ... därför är enkel kodning alltid viktigt.
PHP har en betydande nackdel:när det råder osäkerhet hänger manuset helt enkelt. Alla felsökare hanterar inte oförutsedda händelser, och mycket beror på utvecklarens erfarenhet och intuition. Ju enklare algoritmen, desto mer tillgänglig den strukturerade informationen, desto fler chanser att hitta ett fel eller inte alls erkänna det.
Det är karakteristiskt att när de första matriserna dök upp,varianter av data i form av strukturer har föreslagits - ett klumpigt försök att skapa något från olika typer av data. Den förra överlevde och förvärvade en ny effektiv syntax, medan de senare är historia.
Att skriva en tvådimensionell matris är ett annat parparentes "[" och "]", till exempel: $ aSrcData [1] [2] betyder hänvisning till element [2] i array [1] som ingår i array $ aSrcData. Det finns inget krav i PHP att deklarera data i förväg. All deklarerad information kan alltid kontrolleras för existens.
Det är mycket effektivt att skapa något bara omnär det behövs, i den form som det krävdes, och att förstöra när behovet av det har försvunnit. Med förnuftiga namn som nycklar (index) kan du få läsbara konstruktioner som är meningsfulla i sammanhanget med den aktuella platsen i algoritmen:
$ aAnketa ["name"] = "Ivanov";
$ aAnketa ["ålder"] = 42;
$ aAnketa ["work"] = "Director";
$ aAnketa ["aktiv"] = true;
$ aTable [] = $ aAnketa;
$ aAnketa ["name"] = "Petrov";
$ aAnketa ["ålder"] = 34;
$ aAnketa ["work"] = "Manager";
$ aAnketa ["aktiv"] = true;
$ aTable [] = $ aAnketa;
$ aAnketa ["name"] = "Afanasiev";
$ aAnketa ["ålder"] = 28;
$ aAnketa ["work"] = "Arbetare";
$ aAnketa ["aktiv"] = falskt;
$ aTable [] = $ aAnketa;
$ sOne. = implode (";", $ aTable [1]). "<br/>"; // andra PHP -array till sträng
$ sOne. = $ aTable [1] ["arbete"]; // åtkomst till ett element i den andra matrisen
Resultatet av detta exempel (den första matrisen är normal, nycklarna i den börjar från 0, den andra matrisen är associativ, den har fyra nycklar: "namn", "ålder", "arbete", "aktivt"):
$ sOne = "Petrov; 34; Manager; 1 <br/> Manager";
I detta enkla exempel kan du se hurden skapade profilen kan tillämpas på alla anställda. Du kan skapa en rad medarbetare med index efter personalnummer och, om du behöver en specifik medarbetare, välj honom efter personalnummer.
Om organisationen har avdelningar, eller det finnssäsongsarbetare, eller behöver skilja ut arbetande pensionärer ... PHP -arrayen i array -konstruktion är mycket praktiskt, men du bör aldrig dras med dimensionen. Två eller tre dimensioner är gränsen för en effektiv lösning.
Om det innan spelade någon roll hur allt fungerade, dåUnder de senaste åren har traditionerna i den binära eran, när en programmerare ville veta exakt hur elementen i en array lagrats och ville ha direktåtkomst till dem, helt glömts bort. Det finns många teckenkodningar som tar upp mer än en byte i minnet. Ordet "bit" kan nu bara hittas i bitsökning, men sökning i en PHP -array är ett separat ämne. Elementåtkomst kan vara enkel och associativ. I det första fallet är elementen i arrayen (som har någon av de typer som finns tillgängliga i PHP) numrerade 0, 1, 2, ... I det andra fallet anger programmeraren sitt eget index, oftare kallat "nyckeln" för att komma åt önskat värde.
$ aLine ["fruit"] = "orange"; // här PHP -arraynyckel = "frukt"
eller (så att allt är korrekt, observera sidan och kodning):
$ aLine [iconv ("utf-8", "CP1251", "fruit")] = iconv ("utf-8", "CP1251", "orange");
När du lägger till ett nytt värde i $ aLine -arrayen:
$ aLine [] = iconv ("utf-8", "CP1251", "persika");
$ aLine [iconv ("utf-8", "CP1251", "vegetabilisk")] = iconv ("utf-8", "CP1251", "gurka");
$ aLine [] = iconv ("utf-8", "CP1251", "aubergine");
som ett resultat av loop -körning:
foreach ($ aLine som $ ck => $ cv) {
$ cOne. = $ ck. "=". $ cv. "<br/>";
}
kommer att få:
frukt = apelsin
0 = persika
grönsak = gurka
1 = aubergine
När du lägger till elementen "persika" och "aubergine" bildas matrisens PHP-nyckel sekventiellt från 0, och när du anger dess värde kommer det att vara lika med detta värde.
Det enklaste sättet är att ta bort ett element i en PHP -array underbearbetar den. I det här fallet, till exempel, som ett resultat av loop -körning, skannas den ursprungliga matrisen och en ny formas till vilken onödiga element helt enkelt inte skrivs.
Du kan göra det lättare. Om vi tillämpar det sista exemplet:
unset ($ aLine [0]); // ta bort element från PHP -array
då blir resultatet:
frukt = apelsin
grönsak = gurka
1 = aubergine
Alternativ för att manipulera arrayelementmånga kan byggas. Om du till exempel använder funktionerna: implode () och explode () kan du skriva en PHP -array till en sträng med en separator och analysera den tillbaka till en annan array med en annan separator.
För att helt enkelt radera en hel array i PHP, skriv bara: unset ($ aLine);
Det räcker.
PHP innehåller speciella sökfunktionerarray_keys (), array_values (), array_key_exists () och in_array (), men innan du bestämmer dig för att använda dem bör du överväga att göra en PHP -array -sökning själv.
Varje projekt har ett specifikt ämnesområde,konstruerade matriser, särskilt när en del av semantiken har överförts till syntax och representeras av en uppsättning mycket specifika meningsfulla nycklar. Detta gör att du kan utföra dina egna sökfunktioner, som också kan märkas meningsfullt.
I PHP kan du anropa funktioner vars namn bestäms under programkörning. Ett mycket praktiskt exempel från PHPWord -biblioteket som låter dig läsa och skapa MS Word -dokument:
$ elements = array ("Text", "Inline", "TextRun", "Link", "PreserveText", "TextBreak",
"ListItem", "ListItemRun", "Table", "Image", "Object", "Footnote",
"Endnote", "CheckBox", "TextBox", "Field", "Line");
$ funktioner = array ();
för ($ i = 0; $ i <count ($ element); $ i ++) {
$ functions [$ i] = "lägg till". $ element [$ i];
}
Som ett resultat kommer $ -funktionsmatrisen att ta emot värdena för $ -elementmatrisen, det vill säga namnen på verkliga funktioner som utför arbete med verkliga element i dokumentet.
Genom att anropa $ functions [4] på $ elements [4] kan du få perfekt sökning och snabba resultat.
Uppgiften att sortera data är viktig, ochPHP erbjuder flera funktioner för detta: sort (), rsort (), asort (), ksort (), ... Stigande och fallande element, de två andra funktionerna bevarar förhållandet mellan nycklar och värden. Ibland är det vettigt att blanda arrayvärdena slumpmässigt - shuffle ().
När du använder PHP -funktioner för att sortera, gör det integlöm att element inte bara kan ha olika typer, utan också inte helt naturligt innehåll. Först och främst måste du vara mycket försiktig med att sortera strängar som innehåller ryska bokstäver, sortera datum, samt siffror som är skrivna i olika format.
Det bästa sättet att själv skriva den perfekta lösningen, åtminstone under testfasen av manuset, är genom manuell sortering. Hon hjälper till att förutse oförutsedda situationer.
Tack vare funktionerna implode () och explode (), arrayenkan enkelt omvandlas till en sträng och tas emot tillbaka. Detta låter dig lagra data i en kompakt form och utöka den till ett bekvämt tillstånd efter behov.
En array som förvandlas till en sträng öppnar nya möjligheter. Till exempel kräver uppgiften att hitta nyckelord i texten att det hittade inte läggs till igen.
$ cSrcLine = "Text Text ListItemRun TextBox ListItem TextBox Kryssruta CheckBox TextBox Fotnot";
$ aSrc = explode ("", $ cSrcLine);
$ cDstLine = "";
för ($ i = 0; $ i <count ($ aSrc); $ i ++) {
$ cFind = "[". $ aSrc [$ i]. "]";
if (! is_integer (strpos ($ cDstLine, $ cFind))) {
$ cDstLine. = $ cFind;
}
}
$ aDst = explode ("] [", $ cDstLine);
$ cOne = implode (";", $ aDst);
Som ett resultat får variabeln $ cOne endast de värden från den ursprungliga strängen som förekommer där en gång: "Text; ListItemRun; TextBox; ListItem; Check; Box; CheckBox; Fotnot".
Det rekommenderas inte att använda något relateratmed nationella kodningar, i syntaktiska konstruktioner. Det ryska språket, liksom alla andra språk vars tecken går utöver a-z, kommer inte att skapa problem i dataområdet, men inte i kodens syntax. Ibland leder till och med en enkel PHP -uppgift "att skriva ut en array till en skrivare eller till en skärm" till "krakozyabra", och oftare kommer det bara att stoppa manuset.
PHP är ett lojalt språk och är tolerant motnationella kodningar, men det finns många situationer när den utförda mängden arbete måste göras upprepade gånger bara för att på rätt plats och vid rätt tidpunkt dyker det upp ett nyckelvärde, som inte kommer att vara möjligt att känna igen.
Det bör komma ihåg att PHP -syntax är en sak, menkonstruktionen av denna syntax "handlar" med andra applikationer, med operativsystemet, med hårdvarualternativ. Det finns många alternativ, det är aldrig möjligt att förutse allt.
Regeln är "i koden finns bara koden, men vid inmatningen,inuti, och vid utgången finns all information ”hjälper till att undvika oväntade överraskningar. PHP -värdet i matrisen kan vara "ryska", men nyckeln till det måste vara syntaktiskt korrekt, inte bara ur det givna språkets synvinkel, utan också ur miljösynpunkt.