Ohjelmointi on syntaksia ja semantiikkaa.Ensimmäisen määräävät kielisäännöt, toisen - kehittäjän kokemus. Matriisien osalta kehittäjä voi objektiivisesti ladata syntaksin semantiikan avulla. Tämä ei ole esine, mutta ei ryhmä perinteisessä merkityksessä. PHP mahdollistaa erityyppisten muuttujien ryhmien luomisen, mukaan lukien itsensä. Taulukon elementti voi olla funktio, eli kyky ladata taulukko todellisella algoritmilla, todellisella merkityksellä.
Syntaksi on vakaa, mutta vaihtuu versiosta toiseenversiot, eivätkä ne aina ole yhteensopivia ylöspäin. Ohjelman siirrettävyys on viime vuosisadan unohdettu saavutus. Semantiikka kehittyy ja sitä voidaan aina soveltaa paitsi minkä tahansa kielen kaikissa versioissa; on tullut perinne käyttää syntaktisia rakenteita ilmaisemaan sitä, mitä kielisäännöt eivät edes säätäneet. Matriiseja käyttämällä tämä voidaan ymmärtää yksinkertaisesti.
Taulukoiden rakentaminen
PHP-matriiseilla on kätevä syntaksin ja toiminnallisuus. Tämä tietotyyppi voidaan kuvata etukäteen, mutta usein on kätevää luoda taulukoita lennossa tarvittaessa.
public $ aNone = matriisi (); // taulukko on kuvattu eikä sisällä mitään
public $ aFact = array ("avokado", "persikka", "kirsikka"); // tässä taulukossa on kolme elementtiä
Taulukon luominen joidenkin ehtojen tarkistusprosessissa:
$ cSrcLine = "jäsennetty tietorivi";
varten ($ i = 0; $ i <13; $ i ++) {
$ cUserLine = inputUserLine (); // syötä jotain
if (checkFunc ($ cSrcLine, $ cUserLine) {
$ aResult [] = "Kyllä"; // lisää PHP-matriisiin
} muu {
$ aResult [] = "Ei";
}
}
Tämän esimerkin toteuttamisen seurauksenajoukko 13 elementtiä, joiden arvot ovat vain merkkijonot "Kyllä" tai "Ei". Elementit saavat indeksit välillä 0 - 12. Sama vaikutus voidaan saada kirjoittamalla ensin "tulevaisuuden" PHP-taulukko merkkijonoon:
$ cFutureArray = "";
varten ($ i = 0; $ i <13; $ i ++) {
$ cUserLine = inputUserLine (); // syötä jotain
if ($ i> 0) {$ cFutureArray. = "|"; }
if (checkFunc ($ cSrcLine, $ cUserLine) {$ cFutureArray. = "Kyllä";
} else {$ cFutureArray. = "Ei"; }
}
$ aResult = räjähtää ("|", $ cFutureArray);
Moniulotteiset taulukot
Monet sivuston hallintajärjestelmät (SMS)käytä taulukoita "suurella tavalla". Toisaalta tämä on hyvä käytäntö, ja toisaalta se vaikeuttaa soveltamista. Vaikka kirjoittaja ymmärtäisi PHP-array-in-array -opin, sitä ei pidä käyttää väärin: kehittäjän ei tarvitse vain tottua monimutkaiseen notaatioon. Usein jonkin ajan kuluttua luoja itse muistaa pitkään, mitä hän kirjoitti aluksi:
paluumatriisi (
"view_manager" => matriisi (41, "template_path_stack" => matriisi (__DIR__. "/../view",),
"reititin" => array ("reitti" => array ("sayhello" => array (
"type" => "ZendMvcRouterHttpLiteral",
"options" => array ("route" => "/ sayhello", "oletusarvot" => array (
"controller" => "HelloworldControllerIndex", "action" => "index",))))),
"ohjaimet" => array ("invokables" => array (
"HelloworldControllerIndex" => "HelloworldControllerIndexController"))
);
Tämä on ZF: n PHP Array Array Sample Practice -sovelluksessa2. Aluksi ei kovin innostava, mutta se toimii ja todennäköisesti tekee tästä kehyksestä menestyksen (esimerkki ZendSkeletonApplication / module / Helloworld / config / module.config.php -moduulista).
Matriisi on tärkeä datarakenne aikanasuunnittelu ja kehitys. Sen moniulotteinen versio oli aikoinaan suosittu, mutta ajan mittaan tarvitaan edelleen enintään kahden tai kolmen ulottuvuuden taulukoita. Tämä on yksinkertaisempaa ja selkeämpää, mutta ammatillisesta näkökulmasta, kun joku alkaa lisääntyä, se tarkoittaa, että jotain on vialla ongelmalausekkeessa tai koodissa.
Yksinkertainen, helposti saatavilla ja ymmärrettävä
Luomalla php: hen matriisi taulukossa on parasvoidaan rajoittaa kahteen tai kolmeen tasoon. Vakaudesta ja luotettavuudesta huolimatta PHP tekee virheitä syntaksin käsittelyssä. Voit sietää tämän, sillä sinulla on hyvä koodieditori, joka on tottunut laskemaan sulkeet ja pilkut tarkasti. PHP ei kuitenkaan hallitse tietotyyppejä (tämä on nykyaikaisen ohjelmoinnin karma) ja antaa kehittäjän harjoittaa semanttisia virheitä.
Sääntö muuttujatyyppien hallitsemiseksi taiomat ajatukset semantiikan muuttamisesta syntaksiksi ovat usein mahdotonta hyväksyä ylellisyyttä. Tämä on komentosarjan nopeuden, koodin luettavuuden menetys ... joten koodaamisen helppous on aina välttämätöntä.
PHP: llä on merkittävä haitta:kun on epävarmuutta, käsikirjoitus yksinkertaisesti jumittuu. Kaikki virheenkorjaajat eivät käsittele ennakoimattomia tapahtumia, ja paljon riippuu kehittäjän kokemuksesta ja intuitiosta. Mitä yksinkertaisempi algoritmi, sitä helpommin strukturoitu tieto on, sitä enemmän mahdollisuuksia löytää virhe tai olla myöntämättä sitä lainkaan.
On ominaista, että kun ensimmäiset taulukot ilmestyivät,on ehdotettu datamuunnelmia rakenteina - kömpelö yritys luoda jotain erityyppisistä tiedoista. Ensimmäiset selviytyivät ja hankkivat uuden tehokkaan syntaksin, kun taas jälkimmäiset ovat historiaa.
Yksinkertaiset ja assosiatiiviset taulukot
Kaksiulotteisen taulukon kirjoittaminen on toinen parisuluissa "[" ja "]", esimerkiksi: $ aSrcData [1] [2] tarkoittaa viittausta taulukon [1] elementtiin [2], joka sisältyy ryhmään $ aSrcData. PHP: ssä ei vaadita tietojen ilmoittamista etukäteen. Ilmoitettujen tietojen olemassaolo voidaan aina tarkistaa.
On erittäin tehokasta luoda jotain vain, joskun sitä tarvitaan, siinä muodossa kuin sitä vaadittiin, ja tuhota, kun sen tarve on kadonnut. Käyttämällä järkeviä nimiä avaimina (indekseinä) saat lukukelpoisia rakenteita, jotka ovat merkityksellisiä algoritmin nykyisen paikan yhteydessä:
$ aAnketa ["nimi"] = "Ivanov";
$ aAnketa ["ikä"] = 42;
$ aAnketa ["work"] = "Ohjaaja";
$ aAnketa ["aktiivinen"] = tosi;
$ aTable [] = $ aAnketa;
$ aAnketa ["nimi"] = "Petrov";
$ aAnketa ["ikä"] = 34;
$ aAnketa ["work"] = "Manager";
$ aAnketa ["aktiivinen"] = tosi;
$ aTable [] = $ aAnketa;
$ aAnketa ["nimi"] = "Afanasjev";
$ aAnketa ["ikä"] = 28;
$ aAnketa ["work"] = "Työntekijä";
$ aAnketa ["aktiivinen"] = väärä;
$ aTable [] = $ aAnketa;
$ sOne. = implode (";", $ aTable [1]). "<br/>"; // toinen PHP-taulukko merkkijonoksi
$ sOne. = $ aTable [1] ["työ"]; // pääsy toisen taulukon yhteen elementtiin
Tämän esimerkin tulos (ensimmäinen taulukko on normaali, sen avaimet alkavat 0: sta, toinen taulukko on assosiatiivinen, siinä on neljä avainta: "nimi", "ikä", "työ", "aktiivinen"):
$ sOne = "Petrov; 34; Johtaja; 1 <br/> Johtaja";
Tässä yksinkertaisessa esimerkissä näet mitenluotua profiilia voidaan soveltaa kaikille työntekijöille. Voit luoda joukon työntekijöitä, joilla on hakemistoja henkilöstön numeroiden mukaan, ja jos tarvitset tiettyä työntekijää, valitse se sitten henkilöstönumeron mukaan.
Jos organisaatiossa on osastoja tai onkausityöntekijät tai täytyy erottaa työskentelevät eläkeläiset ... PHP-taulukko taulukkorakenteessa on erittäin kätevä, mutta ulottuvuuden ei pidä koskaan mennä mukaan. Kaksi tai kolme ulottuvuutta ovat raja tehokkaalle ratkaisulle.
Näppäimet taulukoiden kanssa työskentelyyn
Jos ennen oli väliä kuinka kaikki toimi, niinViime vuosina binaarisen aikakauden perinteet, jolloin ohjelmoija halusi tietää tarkalleen, miten ryhmän elementit tallennettiin, ja halusi saada niihin suoran pääsyn, unohdettiin kokonaan. On monia merkkikoodauksia, jotka vievät useamman kuin yhden tavun muistiin. Sana "bit" löytyy nyt vain bittihakutoiminnoista, mutta haku PHP-taulukosta on erillinen aihe. Elementtien käyttö voi olla yksinkertaista ja assosiatiivista. Ensimmäisessä tapauksessa taulukon elementit (joilla on jokin PHP: ssä käytettävissä olevista tyypeistä) on numeroitu 0, 1, 2, ... Toisessa tapauksessa ohjelmoija määrittää oman indeksinsä, jota usein kutsutaan "avaimeksi" päästä haluamaasi arvoon.
$ aLine ["fruit"] = "oranssi"; // tässä PHP array key = "fruit"
tai (jotta kaikki on oikein, noudata sivun ja koodin koodausta):
$ aLine [iconv ("utf-8", "CP1251", "hedelmä")] = iconv ("utf-8", "CP1251", "oranssi");
Kun lisäät uutta arvoa $ aLine -ryhmään:
$ aLine [] = iconv ("utf-8", "CP1251", "persikka");
$ aLine [iconv ("utf-8", "CP1251", "vihannes")] = iconv ("utf-8", "CP1251", "kurkku");
$ aLine [] = iconv ("utf-8", "CP1251", "munakoiso");
silmukan suorituksen seurauksena:
foreach ($ aLine muodossa $ ck => $ cv) {
$ cOne. = $ ck. "=". $ cv. "<br/>";
}
vastaanottaa:
hedelmä = oranssi
0 = persikka
vihannes = kurkku
1 = munakoiso
Kun lisätään elementtejä "persikka" ja "munakoiso", ryhmän PHP-avain muodostetaan peräkkäin 0: sta, ja määritettäessä sen arvoa, se on yhtä suuri kuin tämä arvo.
Elementtien poistaminen taulukosta
Helpoin tapa poistaa PHP-ryhmän elementti onsen käsittely. Tässä tapauksessa esimerkiksi silmukan suorituksen seurauksena alkuperäinen taulukko skannataan ja muodostetaan uusi, johon ei yksinkertaisesti kirjoiteta tarpeettomia elementtejä.
Voit tehdä sen helpommin. Jos sovellamme viimeistä esimerkkiä:
poista ($ aLine [0]); // poista elementti PHP-taulukosta
silloin tulos on:
hedelmä = oranssi
vihannes = kurkku
1 = munakoiso
Vaihtoehdot taulukon elementtien manipuloimiseksimonet voidaan rakentaa. Esimerkiksi käyttämällä funktioita: implode () ja explode (), voit kirjoittaa PHP-taulukon merkkijonoon yhdellä erottimella ja jäsentää sen takaisin toiseen matriisiin eri erottimen avulla.
Jos haluat yksinkertaisesti poistaa koko matriisin PHP: ssä, kirjoita: unset ($ aLine);
Se riittää.
Hae taulukosta
PHP sisältää erityisiä hakutoimintojaarray_keys (), array_values (), array_key_exists () ja in_array (), mutta ennen kuin päätät käyttää niitä, sinun kannattaa harkita itse tekemääsi PHP-matriisihakua.
Kaikilla projekteilla on tietty aihealue,rakennettu taulukko, varsinkin kun osa semantiikasta on siirretty syntaksiin ja edustettu joukolla hyvin spesifisiä merkityksellisiä avaimia. Näin voit suorittaa omat hakutoiminnot, jotka voidaan myös merkitä merkityksellisesti.
PHP: ssä voit kutsua toimintoja, joiden nimet määritetään ohjelman suorituksen aikana. Hyvin käytännöllinen esimerkki PHPWord-kirjastosta, jonka avulla voit lukea ja luoda MS Word -asiakirjoja:
$ elements = array ("Teksti", "Inline", "TextRun", "Linkki", "PreserveText", "TextBreak",
"ListItem", "ListItemRun", "Taulukko", "Kuva", "Objekti", "Alaviite",
"Loppuviite", "valintaruutu", "tekstiruutu", "kenttä", "viiva");
$ toiminnot = matriisi ();
for ($ i = 0; $ i <count ($ elementit); $ i ++) {
$ toiminnot [$ i] = "lisää". $ elementit [$ i];
}
Seurauksena on, että $ function -taulukko saa $ element-taulukon arvot, eli niiden todellisten toimintojen nimet, jotka suorittavat työtä asiakirjan todellisten elementtien kanssa.
Kutsuen $ -elementtejä $ 4 [$] [4] [4] saat täydellisen haun ja nopeat tulokset.
Kohteiden lajittelu
Tietojen lajittelu on välttämätöntä, jaPHP tarjoaa tähän useita toimintoja: lajittelu (), rsort (), asort (), ksort (), ... Nousevat ja laskevat elementit, kaksi toista toimintoa säilyttävät avainten ja arvojen välisen suhteen. Joskus on järkevää sekoittaa matriisiarvoja satunnaisesti - sekoittaa ().
Kun lajittelussa käytetään PHP-toimintoja, äläunohda, että elementeillä voi olla paitsi erityyppisiä, myös täysin luonnollisia sisältöjä. Ensinnäkin sinun on oltava hyvin varovainen venäläisiä kirjaimia sisältävien merkkijonojen lajittelussa, päivämäärien ja eri muodoissa kirjoitettujen numeroiden lajittelussa.
Paras tapa kirjoittaa täydellinen ratkaisu itse, ainakin komentosarjan testausvaiheessa, on manuaalinen lajittelu. Hän auttaa ennakoimaan odottamattomia tilanteita.
Sisäiset taulukot
Kiitos implode () - ja explode () -toimintojen, taulukkovoidaan helposti muuttaa merkkijonoksi ja saada takaisin. Tämän avulla voit tallentaa tietoja pienessä muodossa ja laajentaa niitä sopivaan tilaan tarpeen mukaan.
Merkkijonoksi muutettu taulukko avaa uusia mahdollisuuksia. Esimerkiksi avainsanojen etsiminen tekstistä edellyttää, että löydettyjä ei lisätä uudelleen.
$ cSrcLine = "TekstitekstiluetteloItemRun Tekstiruutu ListItem TextBox -valintaruutu Valintaruutu TextBox-alaviite";
$ aSrc = explode ("", $ cSrcLine);
$ cDstLine = "";
for ($ i = 0; $ i <count ($ aSrc); $ i ++) {
$ cFind = "[". $ aSrc [$ i]. "]";
if (! is_integer (strpos ($ cDstLine, $ cFind))) {
$ cDstLine. = $ cFind;
}
}
$ aDst = räjähtää ("] [", $ cDstLine);
$ cOne = implode (";", $ aDst);
Tämän seurauksena muuttuja $ cOne saa alkuperäisestä merkkijonosta vain ne arvot, jotka esiintyvät siellä kerran: "Teksti; ListItemRun; TextBox; ListItem; Tarkista; Laatikko; Valintaruutu; Alaviite".
Venäjän kieli avaimissa ja arvoissa
Ei ole suositeltavaa käyttää mitään siihen liittyvääkansallisilla koodauksilla syntaktisissa rakenteissa. Venäjän kieli, kuten kaikki muutkin kielet, joiden merkit ylittävät a-z: n, ei aiheuta ongelmia, koska se on data-alueella, mutta ei koodin syntaksissa. Joskus jopa yksinkertainen PHP-tehtävä "taulukon tulostaminen tulostimelle tai näytölle" johtaa "krakozyabraan", ja useammin se vain pysäyttää komentosarjan.
PHP on uskollinen kieli ja suvaitsevainenkansallisia koodauksia, mutta on monia tilanteita, joissa valmistunut työ on tehtävä toistuvasti vain siksi, että oikeaan paikkaan ja oikeaan aikaan avautuu avainarvo, jota ei voida tunnistaa.
PHP-syntakse ja kieliympäristö
Pidä mielessä, että PHP-syntakse on yksi asia, muttatämän syntaksin rakenteet "käsittelevät" muita sovelluksia, käyttöjärjestelmää ja laitteistovaihtoehtoja. Vaihtoehtoja on monia, kaikkea ei voi koskaan ennakoida.
Sääntö on, että "koodissa on vain koodi, mutta syötteessä,sisällä, ja uloskäynnillä on kaikki tiedot ”auttaa välttämään odottamattomia yllätyksiä. Matriisin PHP-arvo voi olla "venäläinen", mutta avaimen siihen on oltava syntaktisesti oikea paitsi annetun kielen, myös sen ympäristön kannalta.