A programozás szintaxis és szemantika.Az elsőt a nyelv szabályai, a másodikat - a fejlesztő tapasztalatai határozzák meg. A tömbök tekintetében a fejlesztő szemantikának vetheti alá a szintaxist. Még nem tárgy, de a hagyományos értelemben már nem tömb. A PHP lehetővé teszi tömbök létrehozását különféle változókból, beleértve önmagukat is. A tömb eleme lehet függvény, vagyis egy tömb valós algoritmussal, valódi jelentéssel történő betöltésének képessége.
A szintaxis stabil, de verzióról verzióra változikverziók, és nem feltétlenül kompatibilisek felfelé. A programok hordozhatósága a múlt század jól elfeledett eredménye. A szemantika fejlődik és mindig alkalmazható nemcsak bármely nyelv bármely változatában; hagyománnyá vált, hogy szintaktikai konstrukciókkal fejezik ki azt, amiről a nyelv szabályai még nem is rendelkeztek. A tömbök példájaként ezt a legegyszerűbben meg lehet érteni.
Tömbök építése
A PHP tömbök kényelmes szintaxissal és funkcionalitással rendelkeznek. Ez az adattípus előre leírható, de szükség esetén gyakran kényelmes tömbök létrehozása menet közben.
public $ aNone = tömb (); // a tömb le van írva, és nem tartalmaz semmit
public $ aFact = tömb ("avokádó", "barack", "cseresznye"); // ennek a tömbnek három eleme van
Tömb létrehozása néhány feltétel ellenőrzése során:
$ cSrcLine = "elemzett adatsor";
($ i = 0; $ i <13; $ i ++) {
$ cUserLine = inputUserLine (); // beírni valamit
if (checkFunc ($ cSrcLine, $ cUserLine) {
$ aResult [] = "Igen"; // hozzáadás a PHP tömbhöz
} más {
$ aResult [] = "Nem";
}
}
A példa végrehajtásának eredményekéntegy 13 elemből álló tömb, amelynek értéke csak az "Igen" vagy "Nem" karakterlánc lesz. Az elemek 0 és 12 közötti indexeket kapnak. Ugyanez a hatás érhető el, ha a "jövő" PHP tömböt korábban karakterláncba írtuk:
$ cFutureArray = "";
($ i = 0; $ i <13; $ i ++) {
$ cUserLine = inputUserLine (); // beírni valamit
if ($ i> 0) {$ cFutureArray. = "|"; }
if (checkFunc ($ cSrcLine, $ cUserLine) {$ cFutureArray. = "Igen";
} else {$ cFutureArray. = "Nem"; }
}
$ aResult = explode ("|", $ cFutureArray);
Többdimenziós tömbök
Számos webhelykezelő rendszer (SMS)használjon tömböket "nagyban". Ez egyrészt jó gyakorlat, másrészt megnehezíti az alkalmazást. Még akkor is, ha a szerző megérti a PHP-array-in-array doktrínát, nem szabad visszaélni vele: nemcsak a fejlesztőnek kell megszoknia a komplex jelölést. Gyakran egy idő után maga az alkotó sokáig emlékezni fog arra, amit először írt:
visszatérő tömb (
"view_manager" => tömb (41, "template_path_stack" => tömb (__DIR__. "/../view",),
"router" => tömb ("Routes" => tömb ("sayhello" => tömb (
"type" => "ZendMvcRouterHttpLiteral",
"options" => tömb ("útvonal" => "/ köszönés", "alapértelmezett" => tömb (
"vezérlő" => "HelloworldControllerIndex", "action" => "index",))))),
"kontrollerek" => tömb ("invokable" => tömb (
"HelloworldControllerIndex" => "HelloworldControllerIndexController"))
);
Ez a PHP tömb a ZF tömbminta gyakorlatában2. Eleinte nem túl inspiráló, de működik, és valószínűleg sikeressé teszi ezt a keretrendszert (példa: ZendSkeletonApplication / module / Helloworld / config / module.config.php module).
A tömb fontos adatkonstrukció a folyamat sorántervezés és fejlesztés. Többdimenziós változata egykor népszerű volt, de idővel továbbra is szükség van legfeljebb két vagy három dimenziós tömbökre. Ez egyszerűbb és egyértelműbb, de szakmai szempontból, ha valami elkezd szaporodni, az azt jelenti, hogy valami nincs rendben a probléma kimutatásában vagy a kódban.
Egyszerű, hozzáférhető és érthető
A php-ben egy tömb tömb létrehozása a legjobbkét vagy három szintre korlátozódhat. A stabilitás és a megbízhatóság ellenére a PHP hibákat követ el a szintaxis feldolgozása során. Ezt elviselheti, ha van egy jó kódszerkesztője, aki hozzá van szokva a zárójelek és vesszők pontos számlálásához. A PHP azonban nem ellenőrzi az adattípusokat (ez a modern programozás karma), és lehetővé teszi a fejlesztő számára, hogy szemantikai hibákat gyakoroljon.
Szabály a változók típusainak ellenőrzésére, illa szemantika szintaxissá alakításának saját elképzelései gyakran elfogadhatatlan luxus. Ez a szkript sebességének, a kód olvashatóságának elvesztése, ezért a kódolás egyszerűsége mindig elengedhetetlen.
A PHP-nek jelentős hátránya van:amikor bizonytalanság van, a forgatókönyv egyszerűen lefagy. Nem minden hibakereső foglalkozik esetleges eseményekkel, és sok múlik a fejlesztő tapasztalatán és megérzésén. Minél egyszerűbb az algoritmus, annál hozzáférhetőbb az információ felépítése, annál nagyobb az esély arra, hogy hibát találjon, vagy egyáltalán ne ismerje el.
Jellemző, hogy az első tömbök megjelenésekorJavasolták az adatok változatait struktúrák formájában - esetlen kísérlet arra, hogy valamit létrehozzanak a különféle típusú adatokból. Az előbbiek túlélték és új hatékony szintaxist nyertek, míg az utóbbiak történelem.
Egyszerű és asszociatív tömbök
Kétdimenziós tömb megírása egy másik pár"[" és "]" zárójelek például: $ aSrcData [1] [2] azt jelenti, hogy hivatkozunk az $ 1SrcData tömbben található [1] tömb [2] elemére. A PHP-ben nincs szükség az adatok előzetes bejelentésére. Bármely deklarált információt mindig ellenőrizni lehet.
Nagyon hatékony létrehozni valamit csak akkor, haamikor szükség van rá, abban a formában, ahogyan szükség volt rá, és elpusztítani, amikor már megszűnt az igény. Az értelmes neveket kulcsokként (indexként) olvasható konstrukciókhoz juthat, amelyek értelmesek az algoritmus aktuális helyének összefüggésében:
$ aAnketa ["név"] = "Ivanov";
$ aAnketa ["kor"] = 42;
$ aAnketa ["work"] = "Igazgató";
$ aAnketa ["aktív"] = igaz;
$ aTable [] = $ aAnketa;
$ aAnketa ["név"] = "Petrov";
$ aAnketa ["kor"] = 34;
$ aAnketa ["work"] = "Menedzser";
$ aAnketa ["aktív"] = igaz;
$ aTable [] = $ aAnketa;
$ aAnketa ["name"] = "Afanasiev";
$ aAnketa ["kor"] = 28;
$ aAnketa ["work"] = "Dolgozó";
$ aAnketa ["aktív"] = hamis;
$ aTable [] = $ aAnketa;
$ sOne. = implode (";", $ aTable [1]). "<br/>"; // második PHP tömb karakterláncra
$ sOne. = $ aTáblázat [1] ["munka"]; // hozzáférés a második tömb egyik eleméhez
Ennek a példának az eredménye (az első tömb normális, a kulcsok 0-tól kezdődnek, a második tömb asszociatív, négy kulcsa van: "név", "kor", "munka", "aktív"):
$ sOne = "Petrov; 34; Menedzser; 1 <br/> Menedzser";
Ebben az egyszerű példában láthatja, hogyana létrehozott profil minden alkalmazottra alkalmazható. Létrehozhat egy alkalmazotti tömböt indexekkel a személyi állomány száma alapján, és ha konkrét alkalmazottra van szüksége, válassza ki őt személyi szám alapján.
Ha a szervezetnek vannak osztályai, vagy vannakidénymunkások, vagy külön kell választani a dolgozó nyugdíjasokat ... a PHP tömb tömb konstrukcióban nagyon hasznos, de soha nem szabad elragadni a dimenzióval. Két vagy három dimenzió határozza meg a hatékony megoldást.
Kulcsok a tömbökkel való munkához
Ha korábban mindegy volt, hogy minden működik, akkorAz elmúlt években teljesen megfeledkeztek a bináris korszak hagyományairól, amikor egy programozó pontosan meg akarta tudni, hogyan tárolják egy tömb elemeit, és közvetlen hozzáférést akart hozzájuk. Sok olyan karakterkódolás létezik, amelyek egynél több bájtot foglalnak el a memóriában. A "bit" szó már csak a bit keresési műveletekben található meg, de a PHP tömbben való keresés külön téma. Az elemekhez való hozzáférés egyszerű és asszociatív lehet. Az első esetben a tömb elemeit (a PHP-ben elérhető típusok bármelyikével) 0, 1, 2, ... számmal látjuk el. A második esetben a programozó megadja saját indexét, amelyet gyakran "kulcsnak" hívnak érje el a kívánt értéket.
$ aLine ["fruit"] = "narancs"; // itt PHP tömb kulcs = "gyümölcs"
vagy (hogy minden rendben legyen, figyelve az oldal és a kód kódolását):
$ aLine [iconv ("utf-8", "CP1251", "gyümölcs")] = iconv ("utf-8", "CP1251", "narancs");
Új érték hozzáadásakor a $ aLine tömbhöz:
$ aLine [] = iconv ("utf-8", "CP1251", "barack");
$ aLine [iconv ("utf-8", "CP1251", "zöldség")] = iconv ("utf-8", "CP1251", "uborka");
$ aLine [] = iconv ("utf-8", "CP1251", "padlizsán");
a hurok végrehajtásának eredményeként:
foreach ($ aLine mint $ ck => $ cv) {
$ cOne. = $ ck. "=". $ cv. "<br/>";
}
fog kapni:
gyümölcs = narancs
0 = barack
zöldség = uborka
1 = padlizsán
A "barack" és a "padlizsán" elemek hozzáadásakor a tömb PHP-kulcsa egymástól kezdve 0-tól képződik, és értékének megadásakor egyenlő lesz ezzel az értékkel.
Elemek eltávolítása egy tömbből
A legegyszerűbb módszer a PHP tömb egyik elemének eltávolítása a közbenfeldolgozása. Ebben az esetben például a hurok végrehajtásának eredményeként az eredeti tömb beolvasásra kerül, és egy új képződik, amelybe egyszerűen nem írnak felesleges elemeket.
Megteheti könnyebben. Ha az utolsó példára vonatkozunk:
unset ($ aLine [0]); // elem eltávolítása a PHP tömbből
akkor az eredmény:
gyümölcs = narancs
zöldség = uborka
1 = padlizsán
A tömbelemek manipulálásának lehetőségeisok fel lehet építeni. Például az: implode () és explode () függvények segítségével írhatunk egy PHP tömböt egy karakterláncra egy elválasztóval, és egy másik elválasztó segítségével újra elemezhetjük egy másik tömbbe.
Ha egyszerűen törölni akar egy teljes tömböt a PHP-ből, írja be: unset ($ aLine);
Ez elég.
Keresés egy tömbben
A PHP speciális keresési funkciókat tartalmazarray_keys (), array_values (), array_key_exists () és in_array (), azonban mielőtt felhasználásuk eldöntené, fontolóra kell vennie egy PHP tömb keresést.
Bármely projektnek van egy meghatározott témája,felépített tömbök, különösen akkor, ha a szemantika egy része átkerül a szintaxisba, és nagyon specifikus értelmes kulcsok halmaza képviseli. Ez lehetővé teszi a saját keresési funkcióinak végrehajtását, amelyeket értelmesen is fel lehet címkézni.
A PHP-ben olyan funkciókat hívhat meg, amelyek nevét a program végrehajtása során határozzák meg. Nagyon praktikus példa a PHPWord könyvtárból, amely lehetővé teszi az MS Word dokumentumok olvasását és létrehozását:
$ elements = tömb ("Szöveg", "Inline", "TextRun", "Link", "PreserveText", "TextBreak",
"ListItem", "ListItemRun", "Táblázat", "Kép", "Objektum", "Lábjegyzet",
"Végjegyzet", "CheckBox", "TextBox", "Field", "Line");
$ függvény = tömb ();
for ($ i = 0; $ i <count ($ elements); $ i ++) {
$ függvények [$ i] = "hozzáadás". $ elemek [$ i];
}
Ennek eredményeként a $ function tömb megkapja a $ elements tömb értékeit, vagyis a valós funkciók nevét, amelyek a dokumentum valós elemeivel dolgoznak.
A $ elemek [4] $ elemek [4] meghívásával tökéletes keresést és gyors eredményeket kaphat.
Tételek rendezése
Az adatok rendezésének feladata elengedhetetlen, ésA PHP többféle funkciót kínál ehhez: sort (), rsort (), asort (), ksort (), ... Emelkedő és csökkenő elemek, a második két függvény megőrzi a kulcsok és az értékek közötti kapcsolatot. Néha van értelme véletlenszerűen keverni a tömb értékeit - shuffle ().
Ha a rendezéshez PHP funkciókat használ, ne tegyefelejtsd el, hogy az elemeknek nemcsak különböző típusaik lehetnek, hanem nem is teljesen természetes tartalmak. Először is nagyon körültekintően kell eljárni az orosz betűket tartalmazó karakterláncok, a dátumok, valamint a különböző formátumban írt számok rendezésével kapcsolatban.
A legjobb megoldást a kézi válogatással - legalább a szkript tesztelési szakaszában - saját maga írja meg. Segíteni fog előre nem látható helyzetek előrejelzésében.
Soros tömbök
Az implode () és explode () függvényeknek köszönhetően a tömbkönnyen átalakítható húrokká és visszakapható. Ez lehetővé teszi az adatok kompakt formában történő tárolását és szükség esetén kényelmes állapotba történő kibővítését.
Egy karakterlánccá alakított tömb új lehetőségeket nyit meg. Például a szövegben kulcsszavak megkeresése megköveteli, hogy a megtaláltakat ne adják hozzá újra.
$ cSrcLine = "Text Text ListItemRun TextBox ListItem TextBox jelölőnégyzet CheckBox TextBox lábjegyzet";
$ aSrc = explode ("", $ cSrcLine);
$ cDstLine = "";
for ($ i = 0; $ i <count ($ aSrc); $ i ++) {
$ cFind = "[". $ aSrc [$ i]. "]";
if (! is_integer (strpos ($ cDstLine, $ cFind))) {
$ cDstLine. = $ cFind;
}
}
$ aDst = felrobban ("] [", $ cDstLine);
$ cOne = implode (";", $ aDst);
Ennek eredményeként a $ cOne változó csak azokat az értékeket kapja meg az eredeti karaktersorozatból, amelyek ott egyszer előfordulnak: "Szöveg; ListItemRun; TextBox; ListItem; Ellenőrzés; Doboz; CheckBox; Lábjegyzet".
Orosz nyelv a kulcsokban és értékekben
Nem ajánlott semmi kapcsolódóat használninemzeti kódolásokkal, szintaktikai konstrukciókban. Az orosz nyelv, csakúgy, mint az összes többi nyelv, amelynek karakterei meghaladják az a-z-t, nem okoz problémát, mivel az adatterületen van, de nem a kód szintaxisában. Néha egy egyszerű "tömb nyomtatóra vagy képernyőre történő kinyomtatása" PHP feladat "krakozyabra" -hoz vezet, és gyakrabban csak leállítja a szkriptet.
A PHP hűséges nyelv és toleráns a nyelvvel szembennemzeti kódolások, de sok olyan helyzet van, amikor az elkészült munkamennyiséget csak azért kell ismételten elvégezni, mert a megfelelő helyen és időben felbukkan egy kulcsérték, amelyet nem lehet felismerni.
PHP szintaxis és nyelvi környezet
Nem szabad elfelejteni, hogy a PHP szintaxis egy dolog, deennek a szintaxisnak a konstrukciói más alkalmazásokkal, az operációs rendszerrel, a hardver opciókkal foglalkoznak. Sok lehetőség van, soha nem lehet mindent előre látni.
A szabály „a kódban csak a kód van, de a bemenetnélbelül és a kijáratnál minden információ megtalálható ”segít elkerülni a váratlan meglepetéseket. A tömbben található PHP-érték lehet "orosz", de ennek kulcsának szintaktikailag helytállónak kell lennie nemcsak az adott nyelv, hanem a környezete szempontjából is.