Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Ylimääräisiä nollia

Sivun loppuun

Putkalainen [29.06.2008 21:18:40]

#

Onko php:ssä valmista funktiota tarvittavien nollien lisäämiseen luvun alkuun? (En ainakaan heti manuaalista löytänyt)

Tähän tyyliin:
1 = 00001
70 = 00070
500 = 00500

Antti Laaksonen [29.06.2008 21:25:02]

#

Esim. funktio sprintf sopii tarkoitukseen:

<?php
echo sprintf("%05d", 123);
?>

Putkalainen [29.06.2008 21:32:37]

#

Kiitos tuo toimii niin kuin pitääkin.

Wizard [01.07.2008 11:02:05]

#

Tuossa on bugin vaara: jos stringin pituus ON JO 5 merkkiä, tulee vastauksena 5 nollaa!

Eli pitää tarkistaa myös stringin pituus. En ole varma miten tuo reagoi pelkän numeerisen arvon kanssa, mutta jos stringissä on kirjaimia, bugi on ilmeinen.

-W-

tsuriga [01.07.2008 11:16:32]

#

str_pad( $input, 5, '0', STR_PAD_LEFT );

Antti Laaksonen [01.07.2008 15:07:48]

#

Tässä on kattavampi esimerkki sprintf:n toiminnasta:

<?php
echo sprintf("%05d\n", 1);
echo sprintf("%05d\n", 12);
echo sprintf("%05d\n", 123);
echo sprintf("%05d\n", 1234);
echo sprintf("%05d\n", 12345);
echo sprintf("%05d\n", 123456);
echo sprintf("%05d\n", 1234567);
?>

Tämä skripti tulostaa seuraavat rivit:

00001
00012
00123
01234
12345
123456
1234567

Nollia siis lisätään, jos luvussa on alle 5 numeroa, ja muuten luku säilyy sellaisenaan.

Wizard [01.07.2008 18:01:33]

#

Liittyen edellämainittuun, ei kyseessä ollut bugi itse PHP:ssa vaan ongelma palvelimella. Jostain syystä palvelin väänsi sprintf("%05s", $arvo); muotoon 00000 jos stringin pituus oli jo 5 merkkiä. Ja ongelma oikeni kun palvelin jouduttiin buuttaamaan.

Tuohan on sinänsä oikein tuo Antin esimerkki siis eikä sen pitäisi tuottaa ongelmia kun ja jos kaikki toimii muuten ok.

-W-

peg [01.07.2008 21:00:34]

#

Molemmat toimivat, mutta onhan niissä eroja:
Tämä Tsurigan str_pad( $input, 5, '0', STR_PAD_LEFT );
oli kuitenkin ihan uusi juttu mulle.

<?php
echo sprintf("%05s", aaa4123),'<br>';  //aaa4123
echo sprintf("%05d", aaa12),'<br>';    //00000
echo sprintf("%07d", 12),'<br>';       //0000012
echo sprintf("%07d", 11),'<br>';       //0000011
echo str_pad( 23, 5, '0', STR_PAD_LEFT ),'<br>';    //00023
echo str_pad( 11222, 5, '0', STR_PAD_LEFT ),'<br>'; //11222
?>

ja tässä muutkin argumentit:
https://www.php.net/manual/en/function.sprintf.php


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta