kzen.dev
  • Întrebări
  • Tag-uri
  • Utilizatori
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 JasonDavis
JasonDavis
Question

De ce să folosiți funcția sprintf în PHP?

Eu sunt încercarea de a afla mai multe despre PHP funcția sprintf (), dar php.net nu m-a ajutat mult ca eu sunt încă confuz, de ce ai vrea să-l folosească?

Uită-te la exemplul meu de mai jos.

De ce să folosiți acest lucru:

$output = sprintf("Here is the result: %s for this date %s", $result, $date);

Atunci când acest lucru face același lucru și este mai ușor să scrie OMI:

$output = 'Here is the result: ' .$result. ' for this date ' .$date;

Îmi lipsește ceva de aici?

185 2009-09-06T20:09:37+00:00 24
 JasonDavis
JasonDavis
Întrebarea editată 11 septembrie 2012 в 10:49
Programare
php
printf
Popular videos
sprintf Function in PHP (Hindi)
sprintf Function in PHP (Hindi)
5 ani în urmă
What is PHP sprintf
What is PHP sprintf
5 ani în urmă
PHP Sprintf Vprintf Sscanf
PHP Sprintf Vprintf Sscanf
2 ani în urmă
PHP : Why use sprintf function in PHP?
PHP : Why use sprintf function in PHP?
1 an în urmă
Week 5 - Part 10 fprintf and sprintf
Week 5 - Part 10 fprintf and sprintf
11 ani în urmă
PHP Class 5 ( printf, sprintf,  Regular Expretion ) [ LeoCoder ].
PHP Class 5 ( printf, sprintf, Regular Expretion ) [ LeoCoder ].
7 ani în urmă
How to use printf() in PHP - In 4 Minutes
How to use printf() in PHP - In 4 Minutes
3 ani în urmă
1.how to work echo printf sprintf print print r
1.how to work echo printf sprintf print print r
3 ani în urmă
C Programming | How to Use sprintf( ) function in programming in C | by Sanjay Gupta
C Programming | How to Use sprintf( ) function in programming in C | by Sanjay Gupta
5 ani în urmă
INF2610 - La fonction sprintf
INF2610 - La fonction sprintf
3 ani în urmă
sprintf() Function | C Programming Tutorial
sprintf() Function | C Programming Tutorial
1 an în urmă
PHP 7 Tutorial  [ITA]  funzioni print, printf, sprintf - #10
PHP 7 Tutorial [ITA] funzioni print, printf, sprintf - #10
5 ani în urmă
Lesson 5 : Output -  print -  echo -  printf -  sprintf
Lesson 5 : Output - print - echo - printf - sprintf
9 ani în urmă
8.2 - Stringhe - Formattate con printf e sprintf #PHP [withArtur]
8.2 - Stringhe - Formattate con printf e sprintf #PHP [withArtur]
8 ani în urmă
PHP Printf and Sprintf Function in Bangla
PHP Printf and Sprintf Function in Bangla
5 ani în urmă
Strings: fprintf(), sprintf() and input()
Strings: fprintf(), sprintf() and input()
10 ani în urmă
Compunerea funcțiilor (aplicații) | Lectii-Virtuale.ro
Compunerea funcțiilor (aplicații) | Lectii-Virtuale.ro
2 ani în urmă
printf() , sprintf() | scanf(), sscanf() | Difference Between printf() AND sprintf().
printf() , sprintf() | scanf(), sscanf() | Difference Between printf() AND sprintf().
2 ani în urmă
« Anterior
Următor »
Această întrebare are 1 răspuns în engleză, pentru a le citi, vă rugăm să vă logați.
Solution / Answer
Isak Savo
Isak Savo
6 septembrie 2009 в 8:13
2009-09-06T20:13:37+00:00
Mai mult
Sursă
Editează
#9449174

sprintf are toate capabilități de formatare original printf ceea ce înseamnă că poate face mult mai mult decât doar să introduceți valori variabile în siruri de caractere.

De exemplu, specificați formatul de număr (hex, zecimal, octal), numărul de zecimale, umplutură și mai mult. Google pentru printf și te'll găsi o mulțime de exemple. A articolul de pe wikipedia printf ar trebui să obține ai început.

127
0
 macinjosh
macinjosh
6 septembrie 2009 в 8:20
2009-09-06T20:20:50+00:00
Mai mult
Sursă
Editează
#9449177

Există multe cazuri de utilizare pentru sprintf dar într-un fel pe care eu le folosesc este de memorarea unui șir de caractere astfel: 'Bună ziua, Numele Meu este %s' într-o bază de date sau ca o constantă într-o clasă PHP. În acest fel atunci când vreau să folosesc acel șir nu pot pur și simplu a face acest lucru:

$name = 'Josh';
// $stringFromDB = 'Hello, My Name is %s';
$greeting = sprintf($stringFromDB, $name);
// $greetting = 'Hello, My Name is Josh'

În esență, aceasta permite o separare în cod. Dacă am folosi 'Bună ziua, Numele Meu este %s' în multe locuri din codul meu nu pot schimba-l la '%s este numele meu' într-un singur loc și se actualizează oriunde altundeva mod automat, fără a fi nevoie pentru a merge la fiecare instanță și pentru a muta în jurul valorii de înlănțuirilor.

76
0
Ken Keenan
Ken Keenan
6 septembrie 2009 в 8:44
2009-09-06T20:44:19+00:00
Mai mult
Sursă
Editează
#9449179

O altă utilizare a sprintf e în aplicații localizate ca argumente pentru a sprintf don't trebuie să fie în ordinea în care acestea apar în șir format.

Exemplu:

$color = 'blue';
$item = 'pen';

sprintf('I have a %s %s', $color, $item);

Dar o limbă ca franceza ordine cuvintele diferit:

$color = 'bleu';
$item = 'stylo';

sprintf('J\'ai un %2$s %1$s', $color, $item);

(Da, franceza mea e de rahat: am învățat limba germană în școală!)

În realitate,'d folosi gettext pentru a stoca siruri de caractere localizate, dar ai prins ideea.


Julien Lafont
Julien Lafont
Răspuns editat 19 ianuarie 2013 в 10:46
46
0
 raspi
raspi
6 septembrie 2009 в 10:09
2009-09-06T22:09:07+00:00
Mai mult
Sursă
Editează
#9449181

L's ușor pentru a traduce.

echo _('Here is the result: ') . $result . _(' for this date ') . $date;

Traducere (gettext) siruri de caractere sunt acum:

  • Aici este rezultatul:
  • pentru această dată

Atunci când tradus în altă limbă ar fi imposibilă sau că rezultatele foarte ciudat exemple.

Acum, dacă aveți

echo sprintf(_("Here is the result: %s for this date %s"), $result, $date);

Traducere (gettext) siruri de caractere este acum:

  • Aici este rezultatul: %s pentru această dată %s

Ceea ce îl face mult mai mult sens și it's mult mai flexibil pentru a traduce în alte limbi

36
0
 Xeoncross
Xeoncross
6 septembrie 2009 в 9:59
2009-09-06T21:59:58+00:00
Mai mult
Sursă
Editează
#9449180

Cel mai bun motiv pe care l-am găsit este faptul că vă permite de a plasa toate siruri de caractere de limbă în limba dosar au fost oamenii pot traduce si comanda-le după cum este necesar - și totuși încă mai știu că, indiferent ce format șirul este într - doriți pentru a afișa nume de utilizatori.

De exemplu, site-ul va spune "bine ai revenit [[User]]" pe partea de sus a paginii. Ca programator nu't știu sau de îngrijire cum UI baieti sunt de gând să scrie că - tu doar știi că un nume de utilizatori va fi prezentat undeva într-un mesaj.

Deci nu poate încorpora mesaj în codul fara sa iti faci griji despre ce mesaj este de fapt.

Lang fișier (RO):

...
$lang['welcome_message'] = 'Welcome back %s';
...

Apoi, puteți sprijini orice tip de mesaj, în orice limbă, folosind acest lucru în actuala cod php.

sprintf($lang['welcome_message'], $user->name())
16
0
John Weisz
John Weisz
15 aprilie 2015 в 9:50
2015-04-15T09:50:55+00:00
Mai mult
Sursă
Editează
#9449191

de ce ai vrea să-l folosească?

Se dovedește foarte util atunci când se utilizează o (extern) - sursă pentru limba siruri de caractere. Dacă aveți nevoie de un număr fix de variabile într-un anumit dicționar șir, trebuie doar să știu corectă comanda:

en.txt

not_found    = "%s could not be found."
bad_argument = "Bad arguments for function %s."
bad_arg_no   = "Bad argument %d for function %s."

hu.txt

not_found    = "A keresett eljárás (%s) nem található."
bad_argument = "Érvénytelen paraméterek a(z) %s eljárás hívásakor."
bad_arg_no   = "Érvénytelen %d. paraméter a(z) %s eljárás hívásakor."

Introdus variabile don't chiar trebuie să fie la începutul sau sfârșitul în mai multe limbi, numai ordonarea lor contează.

Desigur, ai putea scrie propriile funcții pentru a efectua acest înlocui, fără îndoială, chiar cu unele mici creșteri de performanță, dar este mult mai rapid doar la (dată ai o clasa de "Limba" pentru a citi siruri de caractere de limbă):

/**
 * throws exception with message($name = "ExampleMethod"):
 *  - using en.txt: ExampleMethod could not be found.
 *  - using hu.txt: A keresett eljárás (ExampleMethod) nem található.
 */
throw new Exception(sprintf(Language::Get('not_found'), $name));

/**
 * throws exception with message ($param_index = 3, $name = "ExampleMethod"):
 *  - using en.txt: Bad argument 3 for function ExampleMethod.
 *  - using hu.txt: Érvénytelen 3. paraméter a(z) ExampleMethod eljárás hívásakor.
 */
throw new Exception(sprintf(Language::Get('bad_arg_no'), $param_index, $name));

De asemenea, vine cu capacități complete de "printf", astfel este, de asemenea, un one-liner pentru formatarea numeroase tipuri de variabile, de exemplu:

  • număr în virgulă mobilă ieșire precizie, sau
  • completarea numere întregi cu zero.
 Community
Community
Răspuns editat 23 mai 2017 в 12:10
9
0
Samuel Jaeschke
Samuel Jaeschke
7 septembrie 2009 в 1:34
2009-09-07T01:34:50+00:00
Mai mult
Sursă
Editează
#9449183

După cum sa menționat, aceasta vă permite formatarea datelor de intrare. De exemplu, forțându-2dp, de 4 cifre, numere, etc. L's destul de util pentru construirea MySQL query strings.

Un alt avantaj este faptul că vă permite să se separe aspectul șir de date de a fi hrănit în ea, aproape ca și cum ai hrăni în paramaters. De exemplu, în caz de o interogare MySQL:

// For security, you MUST sanitise ALL user input first, eg:
$username = mysql_real_escape_string($_POST['username']); // etc.
// Now creating the query:
$query = sprintf("INSERT INTO `Users` SET `user`='%s',`password`='%s',`realname`='%s';", $username, $passwd_hash, $realname);

Această metodă are, desigur, au și alte utilizări, cum ar fi atunci când imprimați de ieșire ca HTML, etc.

Edit: din motive De securitate, atunci când se utilizează o tehnică ca și mai sus trebuie să-și igienizeze toate variabilele de intrare cu mysql_real_escape_string()` înainte de a utiliza această metodă, pentru a preveni MySQL inserție atacuri. Dacă analiza unsanitised intrare, site-ul și serverul va fi spart. (Cu excepția, desigur, variabilele care au fost construite de cod și sunt garantate pentru a fi în siguranță.)

Samuel Jaeschke
Samuel Jaeschke
Răspuns editat 7 septembrie 2009 в 4:45
8
0
 kenorb
kenorb
22 iulie 2015 в 9:11
2015-07-22T09:11:32+00:00
Mai mult
Sursă
Editează
#9449192

Folosind sprintf() este mult mai curat și mai sigur de a formata șir.

De exemplu, atunci când're de-a face cu variabile de intrare, previne surprize neașteptate specificând formatul așteptat în avans (de exemplu,'re așteaptă string [%s] sau numărul [%d]). Acest lucru ar putea ajuta cu posibil risc de SQL injection, dar nu o't preveni dacă șirul consta citate.

Aceasta ajută, de asemenea, de-a face cu flotoare, puteți specifica în mod explicit cifre de precizie (de exemplu,%.2f), care salvează de la folosind funcții de convertire.

Alte avantaje este că majoritatea dintre cele mai importante limbaje de programare au propriile lor punerea în aplicare a sprintf(), astfel încât odată ce te familiarizezi cu el, l's chiar mai ușor de utilizat, mai degrabă decât de a învăța o nouă limbă (ca și cum pentru a concatena șiruri sau de conversie pluteste).

În rezumat, l's-o bună practică de a utiliza, în scopul de a avea o mai curat și mai ușor de citit codul.

De exemplu, a se vedea mai jos exemplu:

$insert .= "('".$tr[0]."','".$tr[0]."','".$tr[0]."','".$tr[0]."'),";

Sau un exemplu simplu care imprimă exemplu'1','2','3','4':

print "foo: '" . $a . "','" . $b . "'; bar: '" . $c . "','" . $d . "'" . "\n";

și de imprimare cu string formatat:

printf("foo: '%d','%d'; bar: '%d','%d'\n", $a, $b, $c, $d);

unde printf()este echivalent cusprintf()`, dar produce un string formatat în loc de a se întoarce (de variabilă).

Care este mai ușor de citit?

 kenorb
kenorb
Răspuns editat 23 iunie 2017 в 2:50
6
0
Thomas Tremain
Thomas Tremain
17 noiembrie 2012 в 4:45
2012-11-17T04:45:53+00:00
Mai mult
Sursă
Editează
#9449188

Asta:

"<p>Some big paragraph ".$a["name"]." again have to take care of space and stuff .". $a["age"]. "also would be hard to keep track of punctuations and stuff in a really ".$a["token"]. paragraph.";

Ar putea fi, de asemenea, scris:

"<p>Some big paragraph {$a['name']} again have to take care of space and stuff .{$a['age']} also would be hard to keep track of punctuations and stuff in a really {$a['token']} paragraph.";

În opinia mea, acest lucru este clar pentru a citi, dar nu pot vedea folosi pentru localizare, sau de formatare.

4
0
 swordfish
swordfish
30 septembrie 2011 в 9:18
2011-09-30T09:18:24+00:00
Mai mult
Sursă
Editează
#9449185

Chiar și eu, deși același lucru dacă nu am folosit-o recent. Atunci când ai de a genera documente bazate pe intrări de utilizator, acesta va fi la îndemână.

"<p>Some big paragraph ".$a["name"]." again have tot ake care of space and stuff .". $a["age"]. "also would be hard to keep track of punctuations and stuff in a really ".$a["token"]. paragarapoh.";

Care poate fi ușor de scris ca

sprintf("Some big paragraph %s. Again have to take care of space and stuff.%s also wouldnt be hard to keep track of punctuations and stuff in a really %s paragraph",$a,$b,$c);
4
0
 Sahed
Sahed
1 septembrie 2014 в 11:23
2014-09-01T11:23:23+00:00
Mai mult
Sursă
Editează
#9449190

Ei bine, sprintf are multe capacități ca stim un exemplu, ca mai jos:

Acum cateva luni am fost în nevoie de conversie de secunde pentru a oră:minute:secunde format Ca $t = 494050 //secunde am vrut să imprimați ca 137 h 14 m 10 s asa ca am venit cu php function springf() tin doar de câteva secunde în $t " și " ecou sprintf("%02d h %s%02d m %s%02d s", etaj($t/3600), $f, ($t/60)%60, $f, $t%60); dă-mi 137 h 14 m 10 s

sprintf() funcție este foarte utilă dacă știm cum să-l folosească.

3
0
 Paul
Paul
6 septembrie 2009 в 8:17
2009-09-06T20:17:29+00:00
Mai mult
Sursă
Editează
#9449176
  1. Daca'am folosit C/C++, atunci v-ar fi folosit de funcția sprintf.

  2. Acolo este o șansă bună ca cea de-a doua linie este mai puțin eficientă. Echo este conceput ca o ieșire de comandă, întrucât sprintf este conceput pentru a face string token înlocuire. Am'm nu un PHP persoană, dar bănuiesc că există mai multe obiecte implicate cu ecou. În cazul în care acționează ca Java ar fi, se creează un nou șir de fiecare dată când ceva este adăugat la lista, deci'd încheie cu 4 siruri de caractere creat.

3
0
 vise
vise
6 septembrie 2009 в 8:25
2009-09-06T20:25:29+00:00
Mai mult
Sursă
Editează
#9449178

Uneori am ceva de genul asta, pe care o consider un pic mai ușor de citit:

$fileName = sprintf('thumb_%s.%s', 
                    $fileId,
                    $fileInfo['extension']);
3
0
 Castro
Castro
6 septembrie 2009 в 10:13
2009-09-06T22:13:35+00:00
Mai mult
Sursă
Editează
#9449182

Eu folosesc, de obicei sprintf pentru a se asigura că un id care vin din partea utilizatorului de intrare este un număr întreg de exemplu:

// is better use prepared statements, but this is practical sometimes
$query = sprintf("SELECT * from articles where id = %d;",$_GET['article_id']);

De asemenea, este folosit pentru a face rudimentar template-uri (pentru mail-uri html sau altele), astfel încât să puteți reutiliza un șablon în multe locuri:

$mail_body = "Hello %s, ...";
$oneMail = sprintf($mail_body, "Victor");
$anotherMail = sprintf($mail_body, "Juan");

L's foarte util, de asemenea, pentru a formata numere în diferite reprezentări (octal, controlul zecimală, etc).

3
0
 Mee
Mee
8 august 2010 в 2:18
2010-08-08T02:18:19+00:00
Mai mult
Sursă
Editează
#9449184
define('TEXT_MESSAGE', 'The variable "%s" is in the middle!');

sprintf(TEXT_MESSAGE, "Var1");
sprintf(TEXT_MESSAGE, "Var2");
sprintf(TEXT_MESSAGE, "Var3");
3
0
Jani Hartikainen
Jani Hartikainen
6 septembrie 2009 в 8:15
2009-09-06T20:15:52+00:00
Mai mult
Sursă
Editează
#9449175

Unele dintre cazurile tipice sunt în cazul în care ai nevoie de un control mai precis asupra formatul de ieșire. Ea poate fi dificil, de exemplu, asigurați-vă că o valoare specifică a anumită sumă de spații căptușit în față, în funcție de lungimea acestuia, sau că un număr este redat într-o anumită precise format.

Există o mulțime de exemple în manualul PHP

De asemenea, ceea ce vine în exemplul de "mai ușor să scrie".. în Timp ce ecou poate fi mai ușor să scrie, sprintf este mai ușor de citit, mai ales dacă aveți o mulțime de variabile.

Un alt motiv pentru a folosi sprintf sau printf ar putea fi faptul că vrei să lași un utilizator defini formatul de ieșire de o anumită valoare - puteți în condiții de siguranță a le permite să definească un sprintf compatibil cu formatul de ieșire.

Oh, și exemplul tău este de fapt greșit pentru o parte. sprintf returnează șirul, dar "echo", nu - "echo", imediat ieșiri și a se întoarce nimic, în timp ce sprintf doar se întoarce.

3
0
Ro Mc
Ro Mc
15 martie 2014 в 11:57
2014-03-15T11:57:55+00:00
Mai mult
Sursă
Editează
#9449189

sprintf este deosebit de util atunci când formatarea siruri de caractere care folosesc numere. De exemplu,

$oranges = -2.34;
echo sprintf("There are %d oranges in the basket", $oranges);

Output: There are -2 oranges in the basket

Portocale este formatată ca număr întreg (-2), dar se va încadra în jurul valorii de numere pozitive dacă se folosește %u pentru nesemnate valori. Pentru a evita acest comportament, eu folosesc absolut functia abs(), pentru a rotunji numărul de spre zero, după cum urmează:

$oranges = -5.67;
echo sprintf("There are %d oranges in the basket", abs($oranges));

Output: There are 5 oranges in the basket

Rezultatul final este o declarație cu grad ridicat de lizibilitate, construcție logică, clară formatare, și flexibilitate pentru adăugarea de variabile suplimentare după cum este necesar. Cu cât numărul de variabile crește în combinație cu funcții care manipulează aceste variabile, beneficiile devin mai evidente. Ca un exemplu final:

$oranges = -3.14;
$apples = 1.5;
echo sprintf("There are %d oranges and %d apples", abs($oranges), abs($apples));

Output: There are 3 oranges and 4 apples

Partea stângă a sprintf declarație exprimă în mod clar șir și tipurile de valorile preconizate, în timp ce partea dreapta exprimat în mod clar variabilele utilizate și modul în care acestea sunt manipulate.

3
0
 worenga
worenga
26 iunie 2012 в 6:45
2012-06-26T18:45:01+00:00
Mai mult
Sursă
Editează
#9449186

Argumentul este același cu cel pentru folosind template-uri. Te'll doriți pentru a separa Textsleev de variabilă reală valori. În afară de competențele suplimentare de sprintf care ne're pomenit despre asta'e doar o chestie de stil.

2
0
Lloyd Moore
Lloyd Moore
11 septembrie 2012 в 10:09
2012-09-11T22:09:07+00:00
Mai mult
Sursă
Editează
#9449187

Un foarte bun caz de utilizare pentru utilizarea sprintf se aude căptușit formate de numere și, de asemenea, atunci când se amestecă diferite tipuri într-un șir. Acesta poate fi mai ușor de citit în multe cazuri și de a face super-simplu pentru a imprima diferite reprezentări ale acelorași variabile, mai ales cele numerice.

2
0
Utilizator anonim
2 iulie 2017 в 10:24
2017-07-02T22:24:28+00:00
Mai mult
Sursă
Editează
#9449193

Folosind sprintf() funcția de peste ordinare de concatenare are avantajul că se pot aplica diferite tipuri de formatare pe variabile pentru a fi concatenate.

În cazul tău, ai

$output = sprintf("Here is the result: %s for this date %s", $result, $date);

și

$output = 'Here is the result: ' .$result. ' for this date ' .$date;

Să ne ia $rezultat = &#39;a trecut&#39;; date = &#39;23&#39;;

Folosind obișnuit concatenare puteți obține numai de ieșire:

Here is the result: passed for this date 23rd

Cu toate acestea, dacă utilizați sprintf() puteți obține o modificare de ieșire, cum ar fi:

$output = sprintf('Here is the result: %.4s for this date %.2s',$result,$date);
echo $output;

Ieșire:

Here is the result: pass for this date 23
2
0
Comunități asemănătoare 1
PHP România, Moldova
PHP România, Moldova
121 utilizatori
Vorbim despre Laravel, Symfony, Yii, WP, OpenCart... @js_ro @python_ro @seo_ro @Romania_Bot Offtop: @holywars_ro https://github.com/js-ro/it-telegram
Deschide telegram
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
Utilizatori
Toate
Nou
Populare
1
Daniel Gogov
Înregistrat 2 zile în urmă
2
工藤 芳則
Înregistrat 1 săptămână în urmă
3
Ирина Беляева
Înregistrat 1 săptămână în urmă
4
Darya Arsenyeva
Înregistrat 2 săptămâni în urmă
5
anyta nuam-nuam (LapuSiK)
Înregistrat 2 săptămâni în urmă
ID
JA
KO
RO
RU
© kzen.dev 2023
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire