Ota taulukon viimeinen arvo. PHP: Matriisielementtien poistaminen. Normaali elementtien poisto - pois päältä

PHP-taulukoita käytetään kaikkialla. Arvojen lisääminen ja muuttaminen on yleensä yksinkertaista.

Taulukon elementtien poistaminen on erikoistoiminto. Voit yksinkertaisesti poistaa elementin tai poistaa sen ja käyttää sitä. Tämä vivahde tarjoaa suuria mahdollisuuksia.

PHP-taulukot

PHP on moderni ohjelmointikieli, jonka toiminnallisuus taulukoiden kanssa työskentelyssä on korkealla tasolla. Ohjelmoijalla on mahdollisuus käyttää säännöllisiä ja assosiatiivisia taulukoita, suunnitella moniulotteisia tietorakenteita ja olla minkä tahansa tyyppisiä arvoja taulukkoelementteinä.

On kehitetty joukko toimintoja työskentelyyn taulukoiden ja erityisten syntaktisten rakenteiden kanssa. On mahdollista kulkea taulukon läpi käyttämällä omaa algoritmia ja määrittää omia prosessointifunktioita.

Esimerkkejä taulukon luomisesta ja käytöstä

scPrint-toiminto on aputoiminto. Se kirjoittaa rekursiivisesti taulukon merkkijonoon esitelläkseen tuottamiaan tuloksia.

$aFruits-taulukko luodaan tavalliseen tapaan: arvot luetellaan, indeksit määritetään automaattisesti tyhjästä. Viimeinen pilkku on epäolennainen, eikä se luo uutta tyhjää elementtiä.

$aData-taulukko luodaan tyhjäksi, ja siihen lisätään arvot. Kolme on automaattisia ja kaksi assosiatiivisia indeksejä, jotka eivät vaikuta arvojen kokonaisnumerointiin. Siten elementeillä "luumu" ja "persikka" on indeksit "uusi" ja "tuore".

$aInfo-taulukko on moniulotteinen ja assosiatiivinen.

Kolme poistotoimintoa osoittavat, kuinka elementti poistetaan PHP-taulukosta.

Ensimmäinen operaatio poistaa toisen elementin $aFruits-taulukosta, sen indeksi on 1. On huomattava, että seuraavat indeksit eivät ole siirtyneet, mikä tarkoittaa, että syklisissä operaatioissa tällaisella taulukolla on tarpeen tarkistaa elementin olemassaolo .

Toinen toimenpide poistaa viimeisen ja ensimmäisen elementin $aData-taulukosta, mikä vahvistaa, että poistaminen ei vaikuta indekseihin ja että useita elementtejä voidaan poistaa samanaikaisesti.

Kolmas poistaa taulukon taulukosta ja elementin taulukosta, joka on osa toista taulukkoa.

Normaali elementtien poisto - pois päältä

Unset-toiminto poistaa. Ei ole väliä mitä. Se voi olla vain muuttuja tai taulukkoelementti. unset() katsotaan kielioperaattoriksi, ei funktioksi. Tämä operaattori ei palauta mitään arvoa, ja se "tuhoaa" sille parametreina välitetyn. Muuttuja tai matriisi katoaa ikään kuin sitä ei olisi koskaan ollutkaan.

PHP:ssä voit poistaa tyhjiä taulukkoelementtejä eri tavoilla. Itse asiassa se, mitä pidetään tyhjänä, riippuu ohjelmoijasta. Ei kuitenkaan ole kovin viisasta käyttää useita parametreja unset()-operaattorissa tähän tarkoitukseen. On käytännöllisempää siirtää ryhmätoimintoja ryhmätoimintoihin.

Nykyaikaiset tietokoneet ovat erittäin nopeita, ja PHP on erittäin nopea. Mutta tämä ei ole syy luoda ja käsitellä tonnia tietoa käyttämällä hankalia algoritmeja. Tämä on objektiivinen syy lähestyä taulukon elementtien poistamista progressiivisesti.

Elementtien poistaminen merkkijonomenetelmillä

PHP:ssä voit poistaa tyhjiä taulukkoelementtejä joukkona muuntamalla taulukon merkkijonoksi ja palauttamalla sen takaisin. Mutta tämä tapaus sopii vain todella tyhjille elementeille, puuttuville indekseille tai taulukon uudelleenindeksointiin.

Tyhjän elementin käsite riippuu tehtävästä. Usein olemassa oleva taulukkoelementti, joka sisältää tiettyä tietoa, tyhjenee. Esimerkiksi matriisi tallentaa vierailijat. Taulukkoelementti sisältää:

  • vierailijan saapumisaika;
  • nykyinen toimintatila;
  • aktiivinen sivu;
  • viimeinen toimintaaika.

Jos saapumisajan ja viimeisen toimenpiteen ajan välinen ero on yli 1 minuutti (tai muu arvo), voidaan olettaa, että asiakas on poistunut sivustolta. Tällaisia ​​asiakkaita koskevat tietueet voidaan poistaa, jos tehtävänä on seurata aktiivisten vierailijoiden luetteloa eikä käyttää edistyneempiä menetelmiä JavaScriptin avulla.

Kuitenkin "linja" käsittely on hyvä. Esimerkiksi PHP:ssä voit poistaa päällekkäisiä taulukkoelementtejä seuraavasti:

Nopea ja edullinen tapa. Ei ole välttämätöntä käyttää symboleja "[" ja "]" merkitsemään jokaista elementtiä, mutta muista, että kun muunnat taulukon merkkijonoksi, sinun on varmistettava, että jokainen elementti on ainutlaatuinen. Kehysmerkit tulee valita elementissä sallittujen merkkien perusteella. Järkemätön sääntö: jokainen rivielementti on ainutlaatuinen ja sillä on paikkansa (muuten mitään ei voi palauttaa).

Tämä menetelmä on kätevämpi, kun PHP:n tehtävänä on poistaa taulukon elementti arvon mukaan. Voit käyttää array_flip-funktiota ja vaihtaa arvot ja avaimet ja tehdä sitten klassisen poiston. Voit käyttää array_search-funktiota ja etsiä poistettavan arvon avaimen. Mutta ratkaisun pienillä kirjaimilla kirjoitettu versio on selkeämpi ja yksinkertaisempi.

PHP ei käytännössä rajoita kehittäjää mihinkään: ei mittojen lukumäärään eikä elementtien kokoihin. Tähän on turha puuttua. Jokaisen elementin tulee olla pienin mahdollinen pituus ja mittojen lukumäärän tulee olla yksi.

Jos taulukon dimensioita on enemmän kuin kolme, tämä on hyvä syy harkita päätöstä uudelleen. Jos taulukon elementti on pidempi kuin 4000-8000 merkkiä, tulee syntyä epäilyksiä konstruoidun datakuvan järkevyydestä.

Tämä mielipide ei johdu PHP-taulukon toiminnallisuuden kontekstista: poista elementti, lisää erityyppinen objekti, muuta yksi asia kokonaan erilaiseksi. Yksinkertaisuus on avain menestykseen ei vain elämässä, vaan myös algoritmissa. Ohjelman tulee toimia, eikä se saa yllättää mitoillaan, ulottuvuuksillaan ja ideoillaan. Lopputulos ratkaisee, ei suuri idea.

Nykyaikaisena ohjelmointikielenä PHP ei jätä huomiotta rekursiota ja pinoa. On pohjimmiltaan yhdentekevää, mitä ohjelmoija tarkoittaa, kun hän käyttää PHP:n array_pop()-funktiota: poista taulukon viimeinen elementti tai yksinkertaisesti lisää se johonkin muuttujaan.

Mutta muista, että tässä yhteydessä array_pop-funktio on push & pop -toiminto, eli se on pinotyökalu, ei poistotyökalu.

Täällä on tapana sanoa ei "poista", vaan "poista". Semantiikka eroaa huomattavasti. PHP:n array_shift()-funktiolla, joka poistaa taulukon ensimmäisen elementin tai purkaa sen, on kuitenkin erilainen konnotaatio. Myös tässä elementti haetaan ulkoiseen muuttujaan, eikä se ole taulukossa, mutta indeksit siirtyvät.

Kun ensimmäinen elementti poimitaan taulukosta, kaikki sitä seuraavat elementit siirtyvät eteenpäin, mutta vain numeeriset indeksit muuttuvat, pienet kirjaimet pysyvät ennallaan.

Poista tai muuta: tapahtumahistoria

Muuttuja on hyvin kauan sitten, taulukko on kauan sitten, objekti on eilen. Olio-ohjelmoinnista puhutaan edelleen, mutta sen potentiaalia ei käytetä täysillä. On harvinainen tapaus, jolloin pinnalliset ratkaisut joutuivat innostuneiden ratkaisujen ja "viisaiden" sisällönhallintajärjestelmien (CMS) kohteeksi, jossa on paljon "runkoa".

Objektiivinen sääntö: koodin määrällä ei ole väliä, vaan sen laatu! Mutta mikään nykyaikainen sisällönhallintajärjestelmä ei ole vielä noudattanut tätä sääntöä. Sen kirjoittajat uskovat tekevänsä oikein ja tietävänsä mitä tekevät.

Tulos (ominainen piirre): mikään nykyaikaisista sisällönhallintajärjestelmistä ei erotu kunnollisesta "hahmosta" (mallien hoikka ja keveys), kaikilla on valtava koodin täydellisyys, jokainen vaatii kunnioitusta:

  • korkeasti koulutettu ohjelmoija;
  • tarvitsee asennusta;
  • asettaa isännöintivaatimukset;
  • aiheuttaa vaikeuksia siirtyessään toiseen isännöintiin;
  • todella hidastaa työtä ja hallintoa.

Ohjelmoijat ovat tulleet takaisin peruuttamisen käsitteeseen hyvin pitkään. Nykyaikainen ohjelmointi ei voi kuvitella ohjelmiston luomista ilman kahta toimintoa:

  • kumota;
  • tee uudelleen.

Virheiden tekeminen ei ole vain ihmisluonto, vaan jokaisessa tilanteessa on tehtävä peruutus. Nykyaikaisissa Internet-ohjelmointityökaluissa tällä pisteellä ei vain ole merkitystä, vaan sitä käytetään myös hyvin rajoitetusti.

PHP-toiminnot taulukossa: elementin poistaminen, sen tyypin muuttaminen tai uuden lisääminen ovat selkeitä. Mutta ennen oli muuttujia, sitten taulukoita ja sitten kohteita. Eikö ole syytä ajatella sitä tosiasiaa, että taulukko on vain muuttuja ajan mittaan?

Taulukko on tietorakenne ajan mittaan. Mikään kieli ei tähän päivään mennessä ota aikaa syntaksin tekijänä. Sinun ei tarvitse edes puhua semantiikasta: muinaisista ajoista tähän päivään ohjelmoijat ja käyttäjät ymmärtävät vain tiedostoja ja kansioita. Maksimi, johon kehitys on päässyt esimerkiksi PHP:ssä, nimiavaruus heijastuu triviaalisti kansioiden ja tiedostojen rakenteeseen.

Tässä yhteydessä PHP:n banaalit toimet taulukossa: elementin poistaminen, muuttaminen tai lisääminen - vaativat lisätoimia ohjelmoijalta. Voit jättää kaiken ennalleen, ja se toimii kuten aina. Voit ottaa huomioon jokaisen datan toiminnon ja tallentaa sen kokonaisuudessaan, luoda ja tallentaa toimintahistorian.

Tämä on täysin erilainen työn taso ja radikaalisti parempi lopputulos.

PHP on lupaava ja moderni: laadukas syntaksi ja kyky tehdä semantiikkaa yli sallitun. Olio-ohjelmointiideoiden toteuttaminen ja vapaus muuttaa muuttujan tyyppiä tekevät villeimmistä fantasioistasi totta.

Taulukot ovat ikivanha malli, ja assosiatiiviset ovat enemmän kunnianosoitus ajalle kuin käytännön vaatimus. Vaikka on olemassa riittävä määrä tehtäviä, joissa luodaan ennalta määrittämättömän sisällön tietokokoelmia (määrä, arvot, tyypit ja indeksit), joita voidaan tarkastella ja käyttää silmukoissa. Matriisin viimeinen elementti on käytettävissä mikä tahansa luomismenetelmä. Taulukot - säännölliset ja assosiatiiviset - mahdollistavat luetteloiden luomisen, mutta normaalissa PHP-syntaksissa tätä käytetään rajoitetusti.

Nykyinen taulukon arvo

Jos vedetään pois indekseistä ja käytetään konstruktiota

$arData = uusi scField(); // scNumber, scString, scParagraph, ...

missä scField() on abstraktin objektin rakentaja - "tietoelementti", jolla on jälkeläisiä: numerot (scNumber), merkkijonot (scString), lauseet (scParagraph), ... saamme PHP:ssä: viimeinen elementti = array kohteista, jotka näyttävät ominaisuuksiaan varsinaisena elementtinä.

Pohjimmiltaan sillä ei ole väliä, mitä elementtiä pidetään merkityksellisenä, mutta tässä tapauksessa sinun on seurattava osoitinta (PHP:ssa - kohdistin) taulukon sisällä. Useammin sinulla on oltava oma elementtiosoitin. PHP:n "viimeinen elementti = array" ideassa ei tarvita kohdistinta. Viimeinen elementti, joka on käytettävissä end()- ja array_pop()-funktioiden kautta, siirtää ominaisuudet taulukolle. Ary_pop()-funktion lisäksi taulukko ponnahtaa automaattisesti edelliseen elementtiin ja sen ominaisuudet muuttuvat vastaavasti. Tämä mahdollistaa liikkumisen elementtien läpi.

Joten PHP-syntaksin asettaminen kontekstiin, taulukon viimeisen elementin hakeminen tarkoittaa itse asiassa sen ominaisuuksien käyttöä. Johdonmukaisesti asettamalla ja poistamalla elementtejä saadaan ominaisuuksien dynamiikka, uuden dynamiikka, joka muodostuu käytettävissä olevan syntaksin rajoissa.

Ensimmäinen ja muut elementit

On toimintoja taulukon ensimmäisen elementin kanssa työskentelemiseen ja sisäisen osoittimen liikuttamiseen. Normaalissa syntaksissa, joka toteuttaa klassista ohjelmointikäytäntöä, niitä voidaan soveltaa. Mitä tulee taulukoiden luomiseen, joilla on dynaamisesti muuttuva merkitys - ei.

Ohjelmoinnissa puhutaan aina päätösten tekemisestä: muuttujat ottavat arvoja, ehdolliset lauseet muuttavat algoritmin kulkua, silmukat analysoivat jotain ja lopulta syntyy tulos.

Jos painopiste siirretään itse elementtiin ja annetaan sen tehdä omat päätöksensä, ohjelman toteutus saa aivan toisenlaisen, merkityksellisen ilmeen. Useimmiten tämä on tapa, jolla voit saavuttaa tavoitteen, varsinkin kun kyse on esimerkiksi lukuisten Open XML -standardissa kirjoitettujen *.docx-dokumenttitunnisteiden käyttämisestä.

PHP:ssä taulukon viimeisen elementin hankkimisella on uusi merkitys ja hyvät mahdollisuudet.

Tiedostojen lataaminen ja taulukon ominaisuuksien dynamiikka

Kun sivusto tarjoaa mahdollisuuden ladata mitä tahansa tiedostoja, on kätevää käyttää ideaa abstraktista objektista, esimerkiksi scFile ja sen jälkeläiset scImage, scDocument, scTabe, joilla on samat ominaisuudet, mutta niiden ilmentymä ja merkitys (sisältö) on erilainen. PHP-syntaksin yhteydessä (last element = array) end()-funktiolla voit käyttää sitä viimeisenä elementtinä. Tämä ratkaisu on mielenkiintoinen, koska se kääntää tavanomaiset esitykset ja antaa sinun navigoida tietorakenteen läpi sellaisena kuin se on muodostettu.

Tämä taulukoiden käyttö antaa heille täysin uutta sisältöä. Tämän tarjoaa PHP-syntaksi, mutta sen käyttäminen tällä tavalla avaa paljon mahdollisuuksia.

Kun olet tarjonnut menetelmiä visualisointiin, tietokantaan tallentamiseen, toimintakuntoon palauttamiseen (esimerkiksi), sinun ei tarvitse miettiä, mitä tehdä tietyssä tapauksessa. Kaikki ladatut tiedostot sijoitetaan taulukkoon peräkkäin, ja sitä käsiteltäessä kutsutaan aina samat menetelmät saman kaavan mukaan, mutta kuvatiedosto näytetään sellaisenaan, taulukkotiedosto taulukkona ja dokumentti vastaava teksti. PHP-syntaksin kautta käytettävissä oleva taulukon viimeinen elementti on varustettu sen ominaisuuksilla ja tietyllä sisällöllä.

Jälkimmäisessä tapauksessa asiakirjassa on aina merkkejä, rivejä, numeroita ja mikä tärkeintä, muotoilu. Jokaisen elementin seuraaminen on vaikeaa, mutta kun annat kullekin muotoelementille oikean objektin, saat asiakirjan sellaisenaan ajattelematta.

Pino ja rekursio syntaksin sisällä

Kun työskennellään vain viimeisen elementin kanssa, pääehto on pino, mutta kun tämä elementti suoritetaan ja siinä käytetään samaa rakennetta ja erityisesti itseään, se on rekursio. Voit sanoa paljon hyvää PHPOffice-kirjastoista, esimerkiksi PHPWordista, mutta on mahdotonta sanoa, että ne toteuttavat täysimittaisen mekanismin, joka kääntää lähdedokumentin muotoilun tulokseksi.

Todellakin, PHPOffice\PHPWordilla voit yksinkertaisesti avata minkä tahansa Word-asiakirjan (*.docx), mutta tämä on vain arkisto monista strukturoiduista xml-tiedostoista, kuvista, objekteista jne.

Samaan aikaan, jos otat vain xml-tiedostoja, vaikka ne ovatkin yhteydessä toisiinsa (tyylien, taulukoiden, kuvien suhteen), ei ole mahdollista luoda uutta dokumenttia vanhan perusteella ja siirtää siihen halutut muutokset. (esimerkiksi muuta fonttia, värejä, muotoilua). Open XML -tunnisteiden käyttämiseen on monia vaihtoehtoja, eikä edes niin toimiva tuote kuin MS Word aina selviä käyttäjän ideoista ja tekee virheitä.

Itse asiassa *.docx-tiedosto on zip-arkisto, jonka rakenne on selkeä ja ymmärrettävä. Pienellä määrällä objekteja voit kuvata sen muodollisesti ja saada lukuhetkellä täysimittainen, riippumaton tietorakenne, jota voidaan käsitellä semanttisesti.

Tässä tapauksessa asiakirjan tieto on muodollinen tietorakenne. Antamalla sille dynamiikkaa voit helposti siirtyä merkityksen tasolle ja irrottaa syntaksista.

Reg.ru: verkkotunnukset ja hosting

Venäjän suurin rekisterinpitäjä ja hosting-palvelujen tarjoaja.

Yli 2 miljoonaa verkkotunnusta käytössä.

Promootio, verkkotunnuksen sähköposti, yritysratkaisut.

Yli 700 tuhatta asiakasta ympäri maailmaa on jo tehnyt valintansa.

Bootstrap-kehys: nopea mukautuva asettelu

Vaiheittainen videokurssi mukautuvan asettelun perusteista Bootstrap-kehyksessä.

Opi ladomaan yksinkertaisesti, nopeasti ja tehokkaasti tehokkaan ja käytännöllisen työkalun avulla.

Asettelu tilauksesta ja maksu.

*Keskeytä vieritys viemällä hiiri päälle.

Takaisin Eteen

PHP: Matriisielementtien poistaminen

Edessämme on näennäisen triviaali tehtävä: taulukkoelementin poistaminen. Tai useita elementtejä.

Kaikesta yksinkertaisuudestaan ​​huolimatta on olemassa vaihtoehtoja, jotka eivät ole täysin ilmeisiä ja jotka kannattaa tietää, jos haluat viedä PHP:n hieman pidemmälle kuin "Hei, maailma!"

Aloitetaan itse alustasta: yhden elementin poistamiseksi sinun on käytettävä toimintoa unset():

Unset($array); unset($array["foo"]);

Unset($array, $array); unset($array["foo"], $array["bar"]);

Seuraava looginen kysymys on: kuinka poistaa useita toisiaan seuraavia (eli vierekkäisiä) elementtejä? Voit poistaa useita vierekkäisiä elementtejä käyttämällä toimintoa array_splice():

Array_splice($jono, $offset, $pituus);

Huomaa, että näitä toimintoja käytettäessä kaikki viittaukset näihin elementteihin katoavat. Jos haluat jättää avaimen taulukkoon, mutta liittää sen tyhjään arvoon, määritä haluttu elementti tyhjään merkkijonoon:

$array = $array["foo"] = "";

On tärkeää ymmärtää, että toiminto unset() poistaa elementin, kun taas "":n määrittäminen elementille ei poista sitä, mutta tekee sen arvon yhtä suureksi kuin tyhjä merkkijono.

Jos työskentelet numeroiden kanssa, olisi luultavasti parempi liittää arvo 0 tällaiseen avaimeen.

Oletetaan, että jos yritys on lopettanut osien valmistuksen HBL-568-malliin, niin osajoukkoon voidaan tehdä muutos:

Unset($products["HBL-568"]);

Jos HBL-568-osaa ei ole varastossa vain tilapäisesti ja sen odotetaan saapuvan tehtaalta, on parempi tehdä toisin:

$tuotteet["HBL-568"] = 0;

Seuraava seikka, joka on ymmärrettävä, on se, kun funktiota kutsutaan unset() taulukkoelementille PHP säätää taulukon niin, että silmukka toimii edelleen oikein.

Toisin sanoen taulukkoa ei pakattu täyttämään tuloksena olevia "reikiä". Pohjimmiltaan tämä tarkoittaa, että kaikki taulukot ovat assosiatiivisia, vaikka ne näyttävät ensi silmäyksellä numeerisilta. Katsotaanpa selkeitä esimerkkejä tämän käyttäytymisen havainnollistamiseksi:

// Luo "numeerinen" taulukko $eläimet = array("muurahainen", "mehiläinen", "kissa", "koira", "hirvi", "kettu"); paina $eläimet; // Tulostaa "bee" print $eläimet; // Tulostaa "kissa" count($eläimet); // Palauttaa 6 // unset() unset($animals); // Poistaa elementin $animals = "bee" print $eläimet; // Ei tulosta mitään ja antaa virheilmoituksen E_NOTICE print $animals; // Tulostaa "kissa" count($eläimet); // Palauttaa arvon 5, kun $array-elementti pysyy paikallaan ja sisältää "fox" // Uuden elementin lisääminen $animals = "gnu"; // Lisää uuden elementin print $animals; // Ei tulosta mitään, antaa myös virheen E_NOTICE print $eläimet; // Tulostaa "gnu" count($animals); // Palauttaa 6 // Assigning "" (tyhjä merkkijono) $animals = ""; // Aseta "tyhjäksi merkkijonoksi" print $eläimet; // Tulostaa "" count($eläimet); // Palauttaa 6, ts. ottaa huomioon tyhjän taulukon elementin laskettaessa

Käytä funktiota päästäksesi tiheästi asutettuun numerotaulukkoon array_values():

$eläimet = taulukon_arvot($eläimet);

Myös array_splice()-funktio indeksoi taulukot automaattisesti uudelleen "reikien" poistamiseksi:

// Luo "numeerinen" taulukko $eläimet = array("muurahainen", "mehiläinen", "kissa", "koira", "hirvi", "kettu"); array_splice($eläimet, 2, 2); print_r($eläimet);

Tuloksena saamme:

Array (=> muurahainen => mehiläinen => hirvi => kettu)

Missä tämä ominaisuus voisi olla hyödyllinen?

Oletetaan, että työskentelet taulukon kanssa jonona ja haluat poistaa elementtejä tästä jonosta menettämättä satunnaiskäyttömahdollisuutta, kun saatat vahingossa pudota johonkin tuloksena olevista "reikistä".

Ja lopuksi, poistaaksesi turvallisesti ensimmäisen tai viimeisen elementin taulukosta, funktiot array_shift() Ja array_pop() vastaavasti.

Kaikki on hyvin yksinkertaista heidän kanssaan:

$pino = array("oranssi", "banaani", "omena", "vadelma"); $hedelmä = array_shift($pino); print_r($pino);

Yllä olevan koodin suorittamisen seurauksena saamme seuraavan tulosteen:

Array (=> banaani => omena => vadelma)

Käytä toimintoa poistaaksesi viimeisen elementin array_pop():

$pino = array("oranssi", "banaani", "omena", "vadelma"); $hedelmä = array_pop($pino); print_r($pino);

Tulos on seuraava taulukkotuloste:

Array (=> appelsiini => banaani => omena)

Siinä kaikki. Olemme keskustelleet PHP:n taulukkoelementtien poistamisen pääkohdista. Jos jotain tapahtuu, viralliset asiakirjat ovat aina hyödyllisiä.

Piditkö materiaalista ja haluatko kiittää minua?
Jaa vain ystäviesi ja kollegoidesi kanssa!


Katso myös: