• Php-merkkijonojen muotoilu. Sprintf - Palauttaa muotoillun merkkijonon

    Konsolin vakiotulostustoiminto C:ssä on printf. Sen kuvaus on stdio.h-otsikkotiedostossa. Tämän toiminnon avulla voit tulostaa tietoja tai käyttäjäviestejä konsoliin. C-kieli on isojen ja pienten kirjainten välinen ero. Esimerkiksi kaksi toimintoa printf ja scanf eroavat vastaavista funktioistaan ​​Printf ja Scanf. Kaikki printf- ja scanf-funktioiden merkit on myös kirjoitettava pienillä kirjaimilla. Yksi yksinkertaisimmista esimerkeistä C printf:stä, joka tulostaa tutun hello world -tervehdyksen, on:

    Printf-ryhmän funktioiden määrittäminen tiedostossa "stdio.h"

    Tiedosto "stdio.h" viittaa C-kielen vakiosyöttö-/tulostuskirjastoon, jossa kuvataan printf ja vastaavat toiminnot seuraavasti:

    Listatut toiminnot lataavat tietoja tietyistä paikoista, muuntavat ne merkkijonoksi ja lähettävät ne määritettyihin lähtövirtoihin.

    Printf-funktioperhe

    C-kielen printf-ryhmäfunktioita käytetään datan käsittelyyn ja muotoiluun vakiovirtaan. Lisäksi printf- ja vprintf-funktiot kirjoittavat tavalliseen stdout-virtaan, fprintf- ja vfprintf-funktiot lähettävät lähtöargumenttien arvot johonkin määritettyyn lähtövirtaan ja snprintf, sprintf, vsnprintf ja vsprintf kirjoittavat tiedot merkkijonoon. Kaikki luetellut funktiot toimivat käyttämällä muotomerkkijonoa, joka määrittää tulosteen vaadittavat argumenttimuunnokset.

    Fprintf-funktio kirjoittaa tuloksen lähtövirtavirtaan. Sprintf-funktio tulostaa tuloksen puskuriin, joka on merkkijono. Toiminnon käyttäytyminen on määrittelemätön, jos tulostettava merkkijono ylittää puskuritaulukon koon.

    Snprintf-funktio, kuten edellinen, kirjoittaa tiedot merkkijonopuskuriin. Tuloksena oleva merkkijono on tyhjä, ellei bufsz (puskurin koko) ole nolla. Muuten, jos bufsz on nolla, puskuriin ei tulosteta mitään, ja itse puskuri voi hyvinkin olla nollaosoitin, mutta palautusarvo (tavujen määrä, joka olisi pitänyt kirjoittaa) lasketaan silti.

    Printf_s-funktio toimii periaatteessa samalla tavalla kuin printf, yhtä asiaa lukuun ottamatta. Suurin ero printf_s:n kuvauksessa C:ssä ja printf:ssä on seuraava: printf_s-funktio tarkistaa muotomerkkijonon kelvolliset merkit, toisin kuin printf, joka tarkistaa muotomerkkijonosta vain nollaosoittimen.

    Katsotaanpa tarkemmin printf-funktiota.

    yleinen kuvaus

    C:ssä merkkien tulostaminen vakiotulostukseen tapahtuu kutsumalla printf-funktiota. Printf-komento C-muodossa muotoilee joukon lähtötietoja ja lähettää sen stdoutille. Funktiolle argumenteiksi välitetyt arvot tulostetaan konsoliin määritetyn muotomerkkijonon mukaisesti, joka puolestaan ​​sisältää kahden tyyppisiä elementtejä. Ensimmäinen tyyppi ovat näytöllä näkyvät merkit, ja toiseen tyyppiin kuuluvat elementit, jotka määrittävät tietomuodon ominaisuudet ja vastaavat argumenttien esittämistavasta tulostuksen aikana.

    Kun tulostetaan muuttujia printf:llä C:ssä, tietyt merkkien yhdistelmät argumenttijonossa korvataan näiden merkkien mukaan muunnetulla tiedolla, ja jokaisella tietotyypillä on omat tulostusmuotomääritykset.

    Funktiotyyppi ja palautusarvo

    Printf-funktio palauttaa kokonaislukuarvon, joka ilmaisee näytölle tulostettujen merkkien määrän. Voit esimerkiksi määrittää:

    int k = printf("Hei %c %d %s", "a", 11, "kaikki!"),

    ja sitten muuttujan k arvo voi helposti määrittää, tapahtuiko ulostulon aikana virhe. Jos palautetaan negatiivinen arvo (jos funktio palautti "-1"), voimme päätellä, että sen suorituksen aikana tapahtui virhe.

    Syntaksi ja riippuvuudet

    Jotta voit käyttää printf-toimintoa, sinun on sisällytettävä otsikkotiedosto "stdio.h" seuraavasti:

    #sisältää

    Toimintomalli näyttää tältä:

    int printf(const char *muoto, ...)

    Ellipsillä tarkoitetaan tulostettavien argumenttien luetteloa. Printf-funktiota voidaan käyttää eri argumenteilla, mutta ensimmäinen on aina rajattu lainausmerkeillä molemmilta puolilta ja jokainen seuraava on erotettava edellisestä pilkulla. Se, mikä on kirjoitettu lainausmerkeissä ja ei ole muotospesifikaatio, tulostetaan ilman muutoksia, muuten, jos määrittäjä kohtaa, sen arvotyyppi kopioidaan.

    Lomake muotomäärityksiä varten:

    %[liput][leveys][.sijainti][pituus]tyyppi

    Muotoilu printf:llä C-tulostusarvoissa

    Kutsutun funktion nimen jälkeen suluissa määritetty muotomerkkijono luetaan vain yhteen suuntaan: vasemmalta oikealle, ja ensimmäinen tämän rivin jälkeen määritetty argumentti tulostetaan vain, jos ensimmäinen määrittely havaitaan. Muotoilumerkkijonon loppuun asti siinä määritellyt määritykset käynnistävät myöhempien argumenttien muuntamisen ja tulostuksen. Muotomerkkijonossa välilyöntiä käsitellään normaalina merkkinä ja tulostetaan, kun sitä ei käytetä muotomäärittelylausekkeessa.

    Merkki "%" osoittaa tulostusmuotomäärityksen alun, jota seuraa muotokoodi. Kaikki spesifikaatioiden kentät ovat yksittäisiä numeroita tai merkkejä, jotka määrittävät muotoiluehdot.

    Formatulla printf-tulosteella C:ssä on omat erityispiirteensä. Jos lueteltujen argumenttien määrä ylittää muotomäärittelyjen määrän, ne ohitetaan eikä tulosteta. Muussa tapauksessa, jos tulostettavien argumenttien luettelossa on enemmän muotomäärityksiä kuin arvoja, funktiokutsun tulosta ei määritetä.

    Käytettävän argumentin ilmaisemiseksi on mahdollista käyttää "%m$" "%" sijasta ja "*m$" "*" sijaan, m, kokonaisluku desimaaliarvo, joka osoittaa halutun argumentin sijainnin (indeksointi alkaa yhdestä) .

    Vaihtoehdot

    Muotomerkkijonossa käytetyt liput
    LippuKuvaus
    - Tasaa tulos tuloskentässä vasemmalle
    + Kun tulostetaan numeerista arvoa, jossa on etumerkki, "+" pakotetaan tulostamaan ennen positiivista arvoa (oletusarvoisesti vain "-" tulostetaan ennen negatiivista arvoa).
    0 Kokonaislukujen ja liukulukujen kohdalla käytetään etunollia välilyöntien sijasta vasemmanpuoleisten numeroiden täyttämiseen, kun kentän leveydeksi on määritetty suurempi kuin luvun pituus. Kokonaislukujen kohdalla lippu jätetään huomioimatta, jos tarkkuus on erikseen määritelty. Muille tätä lippua käyttäville muunnoksille funktion käyttäytyminen on määrittelemätön. Lippu "0" jätetään huomioimatta, jos "-"-lippu on läsnä
    tilaaJos etumerkityn lausekkeen tulos ei ala kyseisellä merkkimerkillä tai on tyhjä, tulokseen lisätään välilyönti. "Välilyönti"-lippu ohitetaan, jos "+"-lippu on läsnä
    # Vaihtoehtoinen muunnos suoritetaan

    Erilaisia ​​muotomäärityksiä

    MuotomäärittäjäPrintf C:n käyttö ja kuvausArgumentin tyyppi
    % Kirjaimellisen "%" kirjoittaminen
    cYhden merkin tulos. Argumentti muunnetaan etumerkittömäksi merkkityypiksi. Kun käytetään "l"-muuttajaa, argumentti muunnetaan merkkijonoksiallekirjoittamaton merkki
    sTulosta merkkijono. Argumentin on oltava osoitin char-taulukon aloituselementtiinchar*
    d
    i
    Tulostetaan etumerkityn kokonaisluvun desimaaliesitysint
    oTulostetaan etumerkittömän kokonaisluvun oktaaliesitysallekirjoittamaton int
    x
    X
    Tulostaa etumerkittömän kokonaisluvun heksadesimaalimuodon. Merkkejä "a", "b", "c", "d", "e", "f" käytetään muuttamaan "x". Ja muuntaa "X" - "A", "B", "C", "D", "E", "F"allekirjoittamaton int
    uTulostaa desimaalimuunnos ilman etumerkillistä kokonaislukuarvoa. Jos muunnettu arvo ja tarkkuus ovat molemmat 0, merkkejä ei tulostetaallekirjoittamaton int
    f
    F
    Tulostetaan etumerkityn liukulukuluvun desimaaliesityskaksinkertainen
    e
    E
    Tulostaa tieteellisen desimaalimerkinnän pyöristettynä ja muutettuna siten, että desimaalipilkun edessä on yksi numero ja desimaalipilkun jälkeen olevien numeroiden määrä vastaa esityksen tarkkuutta (oletustarkkuus on 6, ja jos 0 on määritetty, niin desimaalimerkkiä ei tulosteta ollenkaan). "e"-merkki näytetään isoilla tai pienillä kirjaimilla muunnoksen mukaankaksinkertainen
    a
    A
    Tulostaa liukulukuluvun heksadesimaaliesitystäkaksinkertainen
    g
    G
    Tulosta liukulukuluvun desimaaliesitys tai sen eksponentiaalinen desimaaliesitys arvosta ja tarkkuudesta riippuenkaksinkertainen
    nPalauttaa printf:n tulostamien elementtien lukumäärän. Tulos kirjoitetaan muuttujaan, johon argumentti viittaa. Tekniset tiedot eivät saa sisältää lippuja, kentän leveyttä tai tarkkuuttaint *
    sOsoittimen lähtötyhjä *

    Kentän leveyden muuntaja

    Printf C:n muotorivi voi kirjoittaa kokonaisluvun prosenttimerkin jälkeen ja ennen formatointikomentoa. Se on kentän leveyden muokkaaja ja vaikuttaa näytettävien tietojen esitystapaan. Arvolle tarkoitettu pienin kentän leveys määräytyy tämän luvun mukaan, ja jos argumentti on pienempi kuin sille varattu kenttä, tulokseen lisätään välilyöntejä tai nollia. Oletuspaikkamerkki on välilyönti, mutta voit asettaa sen nollaan asettamalla leveysmäärityksen eteen. Muokkaus määrittää vähimmäisleveyden, ja mikä tahansa tätä vähimmäisarvoa suurempi arvo tulostuu ilman häiriöitä. Esimerkiksi numero, joka koostuu alle kahdeksasta merkistä ja johon on painettu määritys "%08d", täytetään vaadituilla kahdeksalla merkillä nollilla.

    Samanlaiset muokkaimet voivat myös määrittää tarkkuus- tai kohdistusparametreja.

    Tarkkuusmuunnin

    Tarkkuusmuuttajaa käytetään määrittämään numeroesitykseen tulostettavien desimaalien määrä. Voit lisätä tarkkuusmuuttajan lisäämällä pisteen kentän leveysmäärityksen perään ja määrittämällä haluamasi tarkkuusarvon sen jälkeen. Tarkkuusmuunnin on määritelty "e", "f", "a", "E", "A" ja "F" muodoille. Kokonaisluvuille muuntaja asettaa näytettävien numeroiden määrän lisäämällä tarvittaessa nollia vasempaan numeroon ja rationaalilukuja näytettäessä se määrittää tarvittavan desimaalien määrän. Merkkijonomuuttujien kohdalla tarkkuusmuuntimen pistettä seuraava numero määrittää tulosteen suurimman kentän pituuden. Esimerkiksi muotomäärityksessä "%4.8s" tulostetaan merkkijono, jonka pituus on välillä 4-8 merkkiä; jos se ylittyy, uloimmat merkit jätetään pois.

    Muut muodon muokkaajat

    Oletuskohdistus on tasattu oikealle, mutta sitä voidaan muuttaa asettamalla "-"-merkki "%":n jälkeen. Tämä muotomääritys määrittää tasauksen vasemmalle.

    Lisäksi printf-funktio voi erottaa tulostettavat lyhyet ja pitkät kokonaislukuarvot. Kelvollisia määritteitä ovat "o", "d", "u", "i", "x" ja "X". Pitkän arvon tyyppi määrittää "l"-muuttaja ja lyhyen arvon tyyppi "h"-määrittimellä. Esimerkiksi kun tulostetaan pitkä kokonaisluku ja lyhyt etumerkitön int-arvo, muotomääritykset ovat "%ld" ja "%hu".

    Esimerkkejä

    1. Printf C:n kuvaus ja kunkin funktion kutsumisen tulokset:

    2. Näytä yksinkertainen valintaikkuna:

    printf("viesti");

    3. Ohjelmakoodi:

    Ennen muotomäärityksiä määritetyt lausekkeet tulostetaan näytölle, samoin kuin muotomerkkijonoa seuraavat argumentit. Yllä olevien printf C -toimintojen suorittamisen tulos, tulosteen kuvaus:

    Tämä esimerkki havainnollistaa näyttöä käyttämällä erilaisia ​​muotoja merkkijonoille, kokonaislukumuuttujille, merkeille ja liukulukuille.

    Vakiosyöttötoiminto scanf ja esimerkkejä sen käytöstä

    Scanf-toimintoa käytetään näppäimistön syötteiden lukemiseen. C:n printf:n ja scanf:n kuvaus löytyy otsikkotiedostosta "stdio.h".

    scanf("muodon määrittäjät",&arvo1,&arvo2, ...);

    Yksinkertainen esimerkki skannaustoiminnon kanssa työskentelystä:

    #sisältää

    merkkijono sprintf(merkkijonomuoto [, sekoitetut arkit])

    Palauttaa merkkijonon, joka on luotu käyttämällä muotomerkkijonomuotoa.

    Muotomerkkijono koostuu direktiiveistä: tavalliset merkit (paitsi %), jotka kopioidaan tulosmerkkijonoon, ja muunnoskuvaajat , joista jokainen korvataan jollakin parametreistä. Tämä koskee myös fprintf() , sprintf() Ja printf() .

    Jokainen konversiomäärittäjä koostuu prosenttimerkistä (%), jota seuraa yksi tai useampi lisäelementti (tässä järjestyksessä):

      Valinnainen pehmusteen määrittäjä , joka määrittää millä merkillä tulos täytetään vaaditun pituiseksi. Tämä voi olla välilyönti tai 0. Oletusasetus on välilyönti. Vaihtoehtoinen merkki voidaan määrittää " . Katso esimerkkejä alla.

      Valinnainen kohdistuskuvaaja , joka määrittää kohdistuksen vasemmalle tai oikealle. Oletuksena se on tasattu oikealle, - käytetään kohdistukseen vasemmalle.

      Valinnainen numero leveyden määrittäjä , joka määrittää merkkien vähimmäismäärän, jonka tämän muunnoksen tulos sisältää.

      Valinnainen tarkkuuskuvaaja , joka määrittää, kuinka monta desimaalipistettä liukulukuissa näytetään. Merkittävä vain numeeriselle tietotyypille kellua. (Numeroiden muotoiluun on myös kätevää käyttää toimintoa numero_muoto() .)

    1. Tyypin määrittäjä , joka määrittää, kuinka argumentin tietotyyppiä käsitellään. Kelvolliset tyypit:

      % on prosenttisymboli. Argumenttia ei käytetä.
      b - argumenttia käsitellään kokonaislukuna ja tulostetaan binäärilukuna.
      c - argumenttia käsitellään kokonaislukuna ja tulostetaan merkinä vastaavan ASCII-koodin kanssa.
      d - argumenttia käsitellään kokonaislukuna ja tulostetaan etumerkittynä desimaalilukuna.
      e - argumentti tulkitaan seuraavasti kellua ja tulostetaan tieteellisellä merkinnällä (esim. 1.2e+2).
      u - argumenttia käsitellään kokonaislukuna ja tulostetaan etumerkittömänä desimaalilukuna.
      f - argumentti tulkitaan seuraavasti kellua ja tulostetaan desimaalilukuna.
      o - argumenttia käsitellään kokonaislukuna ja tulostetaan oktaalilukuna.
      s - argumenttia käsitellään merkkijonona.
      x - argumenttia käsitellään kokonaislukuna ja tulostetaan heksadesimaalilukuna (pienin kirjaimin).
      X - argumenttia käsitellään kokonaislukuna ja tulostetaan heksadesimaalilukuna (isoilla kirjaimilla).

    PHP 4.0.6:sta lähtien muotomerkkijono tukee parametrien numerointia ja uudelleenjärjestämistä. Esimerkiksi:


    Tämä koodi tulostaa "Puussa on 5 apinaa". Kuvittele nyt, että muotomerkkijono on erillisessä tiedostossa, joka sitten käännetään toiselle kielelle, ja kirjoitamme sen uudelleen seuraavasti:

    Esimerkki 2: Parametrien järjestyksen muuttaminen

    $format = "%s sisältää %d apinaa" ;

    ?>
    On ongelma: muunnosmääritysten järjestys ei vastaa argumenttien järjestystä. Emme halua muuttaa koodia, ja meidän on määritettävä, mikä argumentti vastaa mitäkin konversiomääritteitä.

    Esimerkki 3: Parametrien järjestyksen muuttaminen

    $muoto = "%2\$s sisältää %1\$d apinaa";
    printf ($muoto, $numero, $sijainti);
    ?>
    Argumenttien numeroinnilla on toinenkin käyttötarkoitus: sen avulla voit tulostaa saman argumentin useita kertoja ilman, että funktiolle välitetään lisäparametreja.

    PHP sprintf -toiminnon avulla voit muuntaa ja sovittaa useita argumentteja yhdeksi merkkijonoksi. Muotoilumääritteiden avulla voit työskennellä merkkien, merkkijonojen, kokonaislukujen ja reaalilukujen kanssa.

    Toimintoa käytetään taulukkotietojen muotoiluun ja mallien luomiseen. Sitä voidaan käyttää lähdetietojen alustavaan formalisointiin tietyssä rakenteessa, muuttamalla niiden sisältöä tai järjestystä.

    PHP sprintf() -funktion syntaksi

    Toiminnon tulos on merkkijono, joka on muodostettu tietyssä järjestyksessä tietystä tiedosta, funktion parametreista:

    • muoto merkkijono;
    • luettelo argumenteista.

    Muotoilussa voit käyttää mitä tahansa suunnittelua ja logiikkaa, mukaan lukien HTML-tunnisteet. Vaikka sprintf:n käytölle ei ole rajoituksia, PHP-käsikirja määrittelee muunnosmääritykset enemmän numeeristen tietojen suuntaan.

    Muoto-elementti alkaa %-merkillä ja päättyy tarkennemerkkiin. Suurin osa muotoiluominaisuuksista on numeeristen tietojen alueella. Lukujen muuntaminen binääri- ja heksadesimaalimuotoon on erittäin käytännöllistä. Tässä PHP:n sprintf-funktiota tuskin kannattaa kirjoittaa korvaajaksi.

    Yllä oleva esimerkki korostaa argumenttien nimeämistä ja määritteen x erottamista X:stä. Viittausten oikea käyttö muotoiltujen argumenttien sarjaan on tärkeää oikean tuloksen kannalta. Numerointi alkaa aina 1:stä.

    Linkkien käyttöjärjestyksellä ei ole väliä, mutta on tärkeää muistaa: PHP sprintf -funktio käsittelee kaikki % elementit (argumenttinumeroa määrittelemättä) peräkkäin yleisessä listassa. Tietyillä parametrinumeroilla määritetyllä numerolla tai %-elementtien sarjalla ei ole mitään tekemistä yleislistan numeroinnin kanssa.

    Kuvaus esimerkistä sprintf:n käytöstä PHP:ssä

    Jos argumenttia ei ole suoraan mahdollista hallita merkkijonona, muotomerkkijonon hallinta ja digitaalisen tiedon tulostaminen tulosmerkkijonoon ei ole ongelma.

    Esimerkin kahdella ensimmäisellä rivillä (argumenttien Arg1, Arg2c ja Arg2p tulos) ensimmäinen argumentti - merkkijono (paikan nimi) tulostetaan sellaisenaan. Kolmas argumentti vie 12 (14) merkkiä ulostulossa. Ensimmäinen rivi tasoittaa vasemmalla olevaa numeroa nollalla, jolloin kokonaispituus on 12 merkkiä. Pisteen jälkeen on neljä merkkiä. Toinen rivi tasaa oikealla olevan numeron (murto-osa) 14 merkkiin. Merkki, jonka mukaan sinun on linjattava oikealle, on -symboli.

    Muotomerkkijono on tavallinen merkkijono. Voit lisätä siihen laskettuja lausekkeita. Tässä tapauksessa lisäyksiä ($cL) ja ($cR) käytetään korostamaan toinen numero. Tämä teki muotomerkkijonosta selkeämmän ja helpommin kirjoitettavan kaikissa esimerkeissä.

    Luodaan muotomerkkijono

    PHP:n työ venäjäksi eli sprintf-funktio on tulkin työtä luonnollisessa ja kätevässä ympäristössä. Itse asiassa HTML-sivu, jossa on PHP-koodin lisäyksiä, edustaa mitä tahansa kontekstia millä tahansa kielellä. Tämä ei ole se vapaus, jonka JavaScript tarjoaa selainympäristössä.

    Venäläisen sisällön tuottamiseksi PHP:llä sinun ei tarvitse koodata kyrillistä, mutta joskus sinun on käytettävä iconv()-muunnosfunktiota. Joka tapauksessa kaikki on saatavilla ja luettavissa.

    Teksti PHP-koodin lisäämiseksi HTML-sivulle on selkeää ja asiaankuuluvaa. Käyttö merkkijonossa:

    Muuttujan arvon ABC=($ABC) yksikköä

    Lisäyksellä ($ABC) on merkitystä vain kerran ja se suoritetaan vain kerran.

    PHP-koodin suorittamisen ominaisuudet sivulla

    Tulkki vain kerran katselee sivua ja vain kerran korvaa lisäosat ($ABC) niiden arvoilla. Ohjelmoija voi harkintansa mukaan käyttää ilmausta "vain kerran", pakottaa PHP toistuvasti lähestymään haluttua tulosta.

    Joka tapauksessa, kun HTML-sivu on lähetetty selaimeen, siinä ei ole PHP-koodia.

    Jos selaimen sivuelementti ottaa yhteyden palvelimeen, se voi käynnistää uuden PHP-skriptin. Tässä lisäykset ($ABC) ovat hyvin suhteellisia, eikä ole mitään takeita oikeasta tuloksesta. Mutta sprintf:n käyttö PHP:ssä on tällaisen mahdollisuuden dynamiikka.

    Kehittäjä ei voi vain saada tällaisen lisäyksen haluttua suoritusta, vaan myös muuttaa riviä, johon se siirtää halutun arvon.

    Sisällön muodostumisen hetki

    PHP:n potentiaalin käyttäminen keinona lisätä lisäyksiä HTML-sivulle, työkaluna koko sivun luomiseen on luonnollista. Tästä sivusto alkaa. Heti kun sivu on muodostettu ja vierailija todella tulee sivustolle, nykyaikaisten ideoiden mukaan:

    • sivua ei voi muuttaa;
    • ikävä käyttäjää Sama se on kielletty.

    Itse asiassa vierailija tuli sivustolle ja sai ensimmäisen vastauksen HTML-koodin muodossa. On täysin väärin muuttaa tätä vastausta - se tarkoittaa vierailijalle kertomista, että sivu muuttaa sitä. Mutta sivun on vastattava vierailijan toimintaan riittävästi ja hänen aloitteestaan.

    Vierailijan saapuminen on ensimmäinen vastaus. Vierailijan toiminta on sivun riittävä reaktio ja sen valmistautuminen kaikkiin vierailijan odotettuihin tuleviin toimiin.

    Merkittävä osa vastuusta sivun dynamiikasta vierailijan aloitteesta kuuluu JavaScriptille, mutta se toimii vain selaimessa ja voi lähettää vain AJAX-pyyntöjä palvelimelle. Jokainen kutsu palvelimelle voi käynnistää PHP-skriptin. Mutta sivun muodostushetki ja pyyntöön vastaamisen hetki eroavat merkittävästi.

    PHP sprintf -toiminto on ihanteellinen työkalu vastausmallin dynaamiseen luomiseen ja sen täyttämiseen halutulla arvolla.

    PHP-koodin vaihtaminen ajon aikana

    Ajatus koodidynamiikasta syntyi yhdessä ensimmäisen ohjelmointikielen kanssa ja on nykyään läsnä jokaisessa nykyaikaisessa ohjelmointikielessä.

    Koodin suorittamista evalin (koodirivin) kautta pidetään nykyään tietoturva-aukkona, mutta se on yhtä suosittua kuin vaarallistakin.

    Jos haluat muuttaa koodia ajon aikana, sinun ei tarvitse käyttää eval()-funktiota tänään. Tämä on enemmän nopea aamiainen, yhden tai kahden komennon suorittaminen, eikä käytännöllinen perusta halutun dynamiikan rakentamiselle.

    PHP sprintf() -funktion avulla voit suunnitella komentosarjamallin, esimerkiksi objektikoodin, jota kutsutaan, kun tietty vierailijatoiminto tapahtuu. Vakiintunut käytäntö tallentaa esineiden kappaleita itsenäisten tiedostojen muodossa on ihanteellinen ratkaisu niiden muuttamiseen sivuston käytön aikana.

    Käyttämällä työkaluja, jotka täydentävät sprintf():n toimintoja, voit paitsi muuttaa tietyn vierailijan toimien seurauksena käytettyjä objekteja, myös siirtää tämän dynamiikan toimimaan muiden vierailijoiden kanssa: tämä on sivuston kehitystä, sen toimivuuden dynamiikka, työkokemuksen ja tiedon kertyminen.

    Tulostaa merkkijonon, muuttujan arvon tai lausekkeen.
    Syntaksi:

    Tulosta (merkkijono arg)

    Print()-funktio tulostaa arg-argumentin, joka voi olla muuttuja tai lauseke.

    vsprintf()

    Palauttaa muotoillun merkkijonon (PHP 4 >= 4.1.0, PHP 5)

    Kuvaus:

    Merkkijono vsprintf (merkkijonomuoto, taulukon arkit)

    Tämä funktio on samanlainen kuin sprintf(), mutta se vaatii taulukon eikä muuttuvan määrän argumentteja.

    Tulostaa yhden tai useamman arvon.
    Syntaksi:

    Kaiku(merkkijono arg1, merkkijono ...)

    echo()-funktio näyttää lueteltujen parametrien arvot.
    echo() on itse asiassa kielirakenne, joten se ei vaadi sulkeita, vaikka käytettäisiin useita argumentteja.
    echo "Koodissa olevat rivinvaihdot tallennetaan ja niitä käytetään lähdössä."
    "Vältä tämän käytön."
    "ketjutusoperaattori";

    Tulosta muotoiltu merkkijono.
    Syntaksi:

    Int printf(merkkijonomuoto [, sekoitetut arkit, ...]);

    Tekee saman kuin sprintf(), vain tuloksena olevaa merkkijonoa ei palauteta, vaan se lähetetään käyttäjän selaimeen.

    Suorittaa merkkijonomuotoilun muuttujan korvauksella.
    Syntaksi:

    Sprintf($-muoto [,args, ...])

    Tämä funktio palauttaa merkkijonon, joka on muodostettu muotomerkkijonosta, joka sisältää joitain erikoismerkkejä, jotka myöhemmin korvataan argumenttiluettelon vastaavien muuttujien arvoilla.
    $format-muotoinen merkkijono voi sisältää muotoilukomentoja, joita edeltää %-merkki.
    Kaikki muut merkit kopioidaan tulostemerkkijonoon sellaisenaan. Jokainen muotomäärittäjä (eli %-merkki ja seuraavat komennot) vastaa yhtä ja vain yhtä parametria, joka on määritetty $format-parametrin jälkeen. Jos haluat sijoittaa % tekstiin tavallisena symbolina, sinun on tuplattava se:

    Echo sprintf("Prosenttiluku oli %d%%",$prosentti);

    Jokainen muotomäärittäjä sisältää enintään viisi elementtiä (samassa järjestyksessä kuin ne näkyvät %)-merkin jälkeen:

    Valinnainen kentän koon määrittäjä, joka määrittää, kuinka monta merkkiä tulosarvolle varataan.
    Paikkamerkkinä (jos arvo on pienempi kuin sen näyttävän kentän koko)
    välilyöntiä tai nollaa voidaan käyttää, oletuksena on välilyönti. Voit määrittää minkä tahansa muun täytemerkin, jos määrität sen muotomerkkijonoon, jota edeltää heittomerkki.
    Valinnainen tasausmääritys, joka määrittää, tasataanko tulos kentän oikealle vai vasemmalle puolelle. Oletusasetus on tasaus oikealle, mutta voit määrittää tasauksen vasemmalle määrittämällä - (miinus) -symbolin.

    Valinnainen numero, joka määrittää kentän koon arvon näyttämistä varten. Jos tulos ei ole kentässä, se "ulottuu" tämän kentän reunojen yli, mutta sitä ei katkaista.
    Valinnainen numero, jota edeltää piste ".", joka määrittää, kuinka monta desimaalipistettä tuloksena olevassa merkkijonossa on.
    Tämä määrite otetaan huomioon vain, jos tulostetaan liukuluku, muuten se jätetään huomioimatta.
    Lopuksi vaadittu (huomaa - ainoa pakollinen!) arvon tyyppi, joka sijoitetaan tulostemerkkijonoon:

    b - listan seuraava argumentti tulostetaan binäärikokonaislukuna
    c - symboli argumentissa määritetyllä koodilla näytetään
    d - kokonaisluku
    f - liukuluku
    o - oktaalinen kokonaisluku
    s - merkkijono
    x - heksadesimaalikokonaisluku pienillä kirjaimilla a-z
    X on heksadesimaalinen kokonaisluku isoilla kirjaimilla A-Z

    Voit määrittää liukulukujen tarkkuuden seuraavasti:

    $raha1 = 68,75;
    $raha2 = 54,35;
    $raha = $raha1 + $raha2;
    // echo $money tulostaa "123.1"...
    $muotoiltu = sprintf("%01.2f", $raha);
    // echo $formatted tulostaa "123.10"!

    Tässä on esimerkki kokonaisluvun tulostamisesta, jota edeltää vaadittu määrä nollia:

    $isodate=sprintf("%04d-%02d-%02d",$vuosi,$kuukausi,$päivä);

    Tulkii merkkijonon muodon mukaan ja syöttää arvot muuttujiin.

    Syntaksi:

    Mixed sscanf(merkkijono str, merkkijonomuoto [, merkkijono var1 ...])

    Sscanf()-funktio on printf()-funktion vastakohta.

    Se tulkitsee merkkijonon str muodon mukaan, samalla tavalla kuin printf()-spesifikaatiossa.

    Kun vain kaksi argumenttia on määritetty, tuloksena saadut arvot palautetaan taulukossa.

    // sarjanumeron saaminen$serial = sscanf("SN/235-0001", "SN/%3d-%4d");
    echo $sarja*10000+$sarja; // lähdöt: 2350001
    // ja tuotantopäivä$date = "01.1.2000";
    lista($kuukausi, $päivä, $vuosi) = sscanf($date, "%s %d %d");
    echo "Päivämäärä: $vuosi-".substr($kuukausi,0,3)."-$päivä";
    // lähdöt: 2000-Jan-01

    Kun määrität valinnaisia ​​lisäparametreja (ne tulee välittää viitteenä)

    funktio palauttaa niiden numeron. Niitä muuttujia, jotka eivät saa arvoja, ei oteta huomioon palautusarvossa.

    // luo XML-tietue merkkijonosta $auth = "765tLewis Carroll";
    $n = sscan($auth,"%dt%s %s", &$id, &$first, &$last);
    kaiku"
    $ ensin
    $viimeinen
    n";

    fprintf()

    Kuvaus:

    Int fprintf (resurssin kahva, merkkijonomuoto [, sekoitetut arkit])

    Kirjoittaa muotomerkkijonolla luodun merkkijonon streamiin, jonka kahva välitetään käsittelemään. Muoto-argumenttia käsitellään yksityiskohtaisesti sprintf()-funktion kuvauksessa.

    fprintf(): täyttö nolilla


    palata;

    fprintf($fp, "%04d-%02d-%02d", $vuosi, $kuukausi, $päivä);
    // kirjoittaa muotoillun päivämäärän tiedostoon date.txt
    ?>

    fprintf(): rahallisten arvojen muotoilu

    if (!($fp = fopen("valuutta.txt", "w")))
    palata;

    $raha1 = 68,75;
    $raha2 = 54,35;
    $raha = $raha1 + $raha2;
    // echo $money tulostaa "123.1";
    $len = fprintf($fp, "%01.2f", $raha);
    // merkkijono "123.10" kirjoitetaan tiedostoon valuutta.txt

    echo "$len tavua kirjoitettu tiedostoon valuutta.txt";
    ?>

    vfprintf()

    Kirjoittaa muotoillun merkkijonon streamiin (PHP 5)

    Kuvaus:

    Int vfprintf (resurssin kahva, merkkijonomuoto, taulukon arkit)

    Kirjoittaa muodon mukaan muotoillun merkkijonon kahvan määrittelemään stream-resurssiin. Muotoilu suoritetaan samalla tavalla kuin sprintf().

    Toimii samoin kuin fprintf(), mutta ottaa joukon argumentteja vaihtuvan määrän argumenttien sijaan.

    Palauttaa tulostemerkkijonon pituuden.

    Katso myös: printf(), sprintf(), sscanf(), fscanf(), vsprintf() ja number_format().
    Esimerkkejä

    vfprintf(): nollatäytetyt kokonaisluvut

    if (!($fp = fopen("päiväys.txt", "w")))
    palata;

    vfprintf($fp, "%04d-%02d-%02d", array($vuosi, $kuukausi, $päivä));
    // kirjoittaa muotoillun ISO-päivämäärän date.txt-tiedostoon
    ?>

    vprintf()

    Tulostaa muotoillun merkkijonon (PHP 4 >= 4.1.0, PHP 5)

    Kuvaus:

    Int vprintf (merkkijonomuoto, taulukon arkit)

    Tulostaa args-taulukon arvot muotoiltuina sprintf()-funktion dokumentaatiossa kuvatun muotoargumentin mukaan.

    Tämä funktio on samanlainen kuin printf(), mutta se vaatii taulukon eikä muuttuvan määrän argumentteja.

    Palauttaa tulostemerkkijonon pituuden

    numero_muoto()

    Muotoilee numeron ryhmäerottelulla (PHP 3, PHP 4, PHP 5)

    Kuvaus:

    Merkkijonon_muoto (float number [, int desimaalit])

    merkkijono numeromuoto (liukuluku, int desimaalit, merkkijono dec_point, merkkijono tuhatta_sep)

    number_format() palauttaa muotoillun luvun. Funktio ottaa yhden, kaksi tai neljä argumenttia (ei kolmea):

    Jos vain yksi argumentti hyväksytään, numero muotoillaan ilman murto-osaa, mutta 3:n numeroryhmien välissä on pilkku (",").

    Jos kaksi argumenttia välitetään, numero muotoillaan desimaalilla pisteiden (".") ja pilkuilla (",") kolmen numeroryhmien välissä.

    Jos kaikki neljä argumenttia hyväksytään, numero muotoillaan desimaaleilla pisteen jälkeen ja erottimella numeroryhmien välillä 3 käyttäen dec_point desimaalipilkuna ja tuhannes_sep ryhmän erottimena.

    Vain tuhat_sep-rivin ensimmäistä merkkiä käytetään. Jos esimerkiksi annat foo muodossa tuhannet_sep muotoillaksesi luvun 1000, number_format() palauttaa arvon 1f000.

    Esimerkki numero_muoto()

    Ranskassa on yleistä käyttää kahta desimaalipistettä (",") ja välilyöntiä (" ") ryhmän erottimena. Tämä muotoilu saadaan käyttämällä seuraavaa koodia:

    $numero = 1234,56;

    // Englanninkielinen muoto (oletus)
    $english_format_number = numeromuoto($numero);
    // 1,234

    // Ranskalainen muoto
    $nombre_format_francais = numeromuoto($numero, 2, ",", " ");
    // 1 234,56

    $numero = 1234,5678;

    // Englanninkielinen muoto ilman ryhmäerottimia
    $english_format_number = numeromuoto($numero, 2, ".", "");
    // 1234.57

    varten muotoiltu tulos PHP:llä Käytössä on kaksi hienoa ominaisuutta: printf() Ja sprintf(). Heillä on melko paljon ominaisuuksia, joista keskustelemme tässä artikkelissa.

    Sanon heti, että ero printf() Ja sprintf() vain, että ensimmäinen tulostaa merkkijonon suoraan lähtövirtaan (esimerkiksi selaimeen) ja toinen palauttaa sen.

    Funktioparametri on merkkijono, jolla on merkit, joissa on %, joita kutsutaan määritteiksi, Ja merkkejä ilman %, joita kutsutaan direktiiveiksi. Ohjeet pysyvät ennallaan muotoiltaessa, mutta määrittely johtaa muiden funktioparametrien korvaamiseen (muotoilurivin jälkeen).

    On olemassa useita määrityksiä, jotka on yhdistetty yhdeksi ryhmäksi (yksi yhteinen % ), jonka järjestys on seuraava:

    1. Pehmusteen määrittäjä. Voit täyttää merkkijonon tiettyyn kokoon tietyllä merkillä. Oletuksena tämä merkki on välilyönti.
    2. Kohdistuksen määrittäjä. Tämän määritteen avulla voit asettaa rivin tasauksen oikealle (oletuksena) tai vasemmalle (jos määrität " - ").
    3. Minimileveyden määrittäjä. Jos tuloksen merkkijonon pituus on lyhyempi, se täytetään merkillä täyttömäärityksestä määritettyyn leveyteen.
    4. Tarkkuusmäärittäjä. Voit määrittää, kuinka monta desimaalipistettä liukulukulle jätetään.
    5. Tyypin määrittäjä. Tämä määritys määrittää tulostettavan tiedon tyypin. Niitä on 8, mutta käytännössä käytetään seuraavia:
      • d- kokonaisluku desimaalimuodossa.
      • f- liukuluku desimaalimuodossa.
      • s- linja.

    Katsotaanpa klassikkoa esimerkki muotoillun päivämäärän tulostamiseen:

    $vuosi = 2012;
    $kuukausi = 9;
    $päivä = 28;
    printf("Kirjoituspäivämäärä: %02d.%02d.%04d", $päivä, $kuukausi, $vuosi);
    ?>

    Ei ole vaikea arvata, että tulos on seuraava rivi: " Artikkelin kirjoituspäivämäärä: 28.09.2012". Huomaa kuinka monta määritteiden ryhmää, niin monta parametria lähetetään itse muodon lisäksi. Rivi " Artikkelin kirjoituspäivämäärä:" on ohje, ja se pysyy ennallaan. Katsotaan nyt esimerkkinä toista määrittäjien ryhmää, joka vastaa kuukaudesta. Muut ryhmät ovat täysin identtisiä.

    • %
    • 0 - merkki, jolla määritetty parametri täytetään vaadittuun leveyteen.
    • 2 - minimileveys. Vastaavasti, jos rivin pituus on pienempi, se täytetään 0 .
    • d- tulostetaan kokonaislukuna. Jos laitat esim. b(toinen tyyppimäärite), silloin sama numero näytetään, mutta binäärimuodossa.

    Annan sinulle toisen suositun esimerkki printf-funktion (ja sprintf()) käytöstä liittyy pyöristysnumeroihin:

    $x = 12,596123;
    printf("%06.2f", $x); // "012.60" tulee näkyviin
    ?>

    Katsotaanpa funktion ensimmäistä argumenttia printf():

    • % - täsmennysryhmän alku.
    • 0 - merkki täytettäväksi vaadittuun pituuteen.
    • 6 - vaadittu pituus (kärki sisältyy tietysti myös tähän pituuteen).
    • .2 - tarkkuus jopa 2 desimaalin tarkkuudella.
    • f- liukulukujen tyyppi. Itse asiassa pyöristäminen on järkevää vain tälle tyypille.

    Kuten näet, printf()- ja sprintf()-funktiot helpottaa näennäisen monimutkaisten ongelmien ratkaisemista. Siksi sinun on ehdottomasti oltava ne arsenaalissasi.