یک رشته تولید شده با توجه به قالب رشته قالب بندی را برمی گرداند.
مولفه های
رشته قالب از صفر یا بیشتر دستورالعمل تشکیل شده است: کاراکترهای معمولی (به استثنای ٪) که مستقیماً در مشخصات نتیجه و تبدیل کپی می شوند ، که هر یک از آنها منجر به واکشی پارامتر خاص خود می شود.
مشخصات تبدیل از این نمونه اولیه است: ٪ [argnum $] [Flags] [Width] [. Precision] مشخصات.
ارگوم
یک عدد صحیح به دنبال آن یک علامت دلار $ ، برای مشخص کردن کدام آرگومان برای معالجه در تبدیل است.
پرچم
| پرچم | شرح |
| - | توجیهی سمت چپ در عرض میدان داده شده ؛توجیه درست پیش فرض است |
| + | پیشوند اعداد مثبت با یک علامت به علاوه + ؛پیش فرض فقط منفی با یک علامت منفی پیشوند می شوند. |
| (فضا) | نتیجه را با فضاها لنت می کند. این پیش فرض است. |
| 0 | فقط شماره های سمت چپ با صفر. با مشخصات S ، این نیز می تواند با صفحات مناسب باشد. |
| (چار) | نتیجه را با شخصیت (کاراکتر) لنت می کند. |
عرض
یک عدد صحیح که می گوید این تبدیل چند شخصیت (حداقل) باید منجر شود.
دقت، درستی
- برای مشخصات E ، E ، F و F: این تعداد رقم هایی است که باید بعد از نقطه اعشاری چاپ شوند (به طور پیش فرض ، این 6 است).
- برای مشخصات G ، G ، H و H: این حداکثر تعداد رقم قابل توجهی است که باید چاپ شوند.
- برای مشخص کننده S: به عنوان یک نقطه برش عمل می کند و حداکثر حد شخصیت را در رشته تنظیم می کند.
توجه: اگر دوره بدون مقدار صریح برای دقت مشخص شود ، 0 فرض می شود.
توجه: تلاش برای استفاده از مشخصات موقعیت بزرگتر از PHP_INT_MAX هشدارهایی ایجاد می کند.
بگذارید P با دقت برابر باشد اگر Nonzero باشد ، 6 در صورت حذف دقت ، یا 1 در صورت صفر بودن 1. سپس ، اگر تبدیل با سبک E دارای نماینده x باشد:
If P>x ≥ −4 ، تبدیل با سبک f و دقت p - (x + 1) است. در غیر این صورت ، تبدیل با سبک E و دقت P - 1 است.
هشدار
مشخص کننده نوع C باعث نادیده گرفتن بالشتک و عرض می شود
هشدار
تلاش برای استفاده از ترکیبی از مشخصات رشته و عرض با مجموعه های کاراکتر که به بیش از یک بایت در هر کاراکتر نیاز دارند ممکن است منجر به نتایج غیر منتظره شود
متغیرها برای یک نوع مناسب به یک نوع مناسب تبدیل می شوند:دست زدن به نوع
| نوع | مشخص کننده |
| رشته | s |
| در نظر گرفتن | D ، U ، C ، O ، X ، X ، B |
| شناور | E ، E ، F ، F ، G ، G ، H ، H |
مقادیر بازگشت
یک رشته تولید شده با توجه به قالب رشته قالب بندی را برمی گرداند.
تعویض
| نسخه | شرح |
| 8. 0. 0 | این عملکرد دیگر به دلیل عدم موفقیت نادرست نیست. |
مثال ها
مثال شماره 1 مبادله استدلال
رشته فرمت از شماره گذاری/مبادله آرگومان پشتیبانی می کند.
$format = 'There are %d monkeys in the %s' ; echo sprintf ( $format , $num , $location ); ?>
مثال فوق از خروجی خواهد بود:
5 میمون در درخت وجود دارد
با این حال تصور کنید که ما یک رشته فرمت را در یک فایل جداگانه ایجاد می کنیم ، معمولاً به این دلیل که می خواهیم آن را بین المللی کنیم و آن را به صورت بازنویسی کنیم:
$format = 'The %s contains %d monkeys' ; echo sprintf ( $format , $num , $location ); ?>اکنون یک مشکل داریم. ترتیب متغیرها در رشته فرمت با ترتیب آرگومان های موجود در کد مطابقت ندارد. ما می خواهیم کد را همانطور که هست ترک کنیم و به سادگی در رشته فرمت نشان می دهیم که متغیرها به آن اشاره می کنند. ما در عوض رشته فرمت را مانند این می نویسیم:
$format = 'The %2$s contains %1$d monkeys' ; echo sprintf ( $format , $num , $location ); ?>یک مزیت اضافی این است که می توان بدون اضافه کردن استدلال های بیشتر در کد ، متغیرها را تکرار کرد.
$format = 'The %2$s contains %1$d monkeys. That's a nice %2$s full of %1$d monkeys.' ; echo sprintf ( $format , $num , $location ); ?>
هنگام استفاده از مبادله آرگومان ، مشخص کننده موقعیت N $ باید بلافاصله پس از علامت درصد (٪) ، قبل از هر گونه مشخصات دیگر ، همانطور که در زیر آمده است ، بیاید.
مثال شماره 2 مشخص کردن شخصیت بالشتک
echo sprintf ( "%'.9d
" , 123 ); echo sprintf ( "%'.09d
" , 123 ); ?>مثال فوق از خروجی خواهد بود:
بشر123 000000123
مثال شماره 3 مشخص کننده موقعیت با سایر مشخصات
$format = 'The %2$s contains %1$04d monkeys' ; echo sprintf ( $format , $num , $location ); ?>مثال فوق از خروجی خواهد بود:
این درخت حاوی 0005 میمون است
مثال شماره 4 Sprintf (): اعداد صحیح صفر
$isodate = sprintf ( "%04d-%02d-%02d" , $year , $month , $day ); ?>مثال شماره 5 Sprintf (): قالب بندی ارز
$money1 = 68.75 ; $money2 = 54.35 ; $money = $money1 + $money2 ; echo $money ; echo "
" ; $formatted = sprintf ( "%01.2f" , $money ); echo $formatted ; ?>
مثال فوق از خروجی خواهد بود:
123. 1 123. 10
مثال شماره 6 Sprintf (): نماد علمی
echo sprintf ( "%.3e" , $number ); ?>
مثال فوق از خروجی خواهد بود:
3. 625e+8
همچنین ببینید
- printf () - خروجی یک رشته فرمت شده
- fprintf () - یک رشته فرمت شده را به یک جریان بنویسید
- vprintf () - خروجی یک رشته فرمت شده
- vsprintf () - یک رشته فرمت شده را برگردانید
- vfprintf () - یک رشته فرمت شده را به یک جریان بنویسید
- SSCANF () - ورودی از یک رشته با توجه به یک قالب
- FSCANF () - ورودی از یک پرونده با توجه به یک قالب
- number_format () - یک شماره را با هزاران گروهی قالب بندی کنید
- تاریخ () - یک جدول زمانی UNIX را قالب بندی کنید
یادداشت های کاربر 36 یادداشت
14 سال پیش
با توابع printf () و sprintf () ، شخصیت فرار backslash '' بلکه "٪" نیست.
Ie. to print '%' character you need to escape it with itself: printf ( '%%%s%%' , 'koko' ); #output: '%koko%' ?>
10 سال پیش
1. یک علامت به علاوه ('+') به معنای قرار دادن "+" قبل از اعداد مثبت در حالی که یک علامت منفی ('-') به معنای توجیه باقی مانده است. این مستندات به طور نادرست بیان می کند که قابل تعویض هستند. آنها نتایج منحصر به فردی را تولید می کنند که می توانند با هم ترکیب شوند:
echo sprintf ( "|%+4d|%+4d|
" , 1 , - 1 ); echo sprintf ( "|%-4d|%-4d|
" , 1 , - 1 ); echo sprintf ( "|%+-4d|%+-4d|
" , 1 , - 1 ); ?>خروجی ها:
2. بالشتک با "0" متفاوت از بالشتک با شخصیت های دیگر است. پس از هر علامت ، صفر فقط در قسمت جلوی یک عدد اضافه می شود. شخصیت های دیگر قبل از علامت یا بعد از شماره اضافه می شوند:
Echo Sprintf ("| ٪ 04d | n" ، - 2) ؛Echo Sprintf ("| ٪ ': 4d | n" ، - 2) ؛Echo Sprintf ("| ٪ - ': 4d | n" ، - 2) ؛
// مشخص کردن هر دو "-" و "0" با نتایج غیر منتظره درگیری ایجاد می کند: echo sprintf ("| ٪ -04d | n" ،-2) ؛
// Padding with other digits behaves like other non-zero characters: echo sprintf ( "|%-'14d|
" , - 2 ); echo sprintf ( "|%-'04d|
" , - 2 ); ?>خروجی ها:
11 سال پیش
در اینجا نحوه چاپ یک عدد نقطه شناور با 16 رقم مهم بدون در نظر گرفتن بزرگی آورده شده است:
$result = sprintf ( sprintf ( '%%.%dF' , max ( 15 - floor ( log10 ( $value )), 0 )), $value ); ?>این با اطمینان بیشتری نسبت به انجام کاری مانند Sprintf ('٪ 15f' ، $ مقدار) کار می کند زیرا دومی ممکن است رقم های قابل توجهی را برای تعداد بسیار کمی قطع کند ، یا رقم های جعلی را چاپ کند (به معنای رقم های اضافی فراتر از آنچه که می تواند در یک نقطه شناور قابل اعتماد باشدشماره) برای تعداد بسیار زیاد.
8 سال پیش
در حال حاضر برخی از نظرات در مورد استفاده از Sprintf برای مجبور کردن صفرهای پیشرو در پیشرو وجود دارد ، اما نمونه ها فقط شامل عدد صحیح هستند. من به صفرهای پیشرو در شماره های نقطه شناور نیاز داشتم و تعجب کردم که همانطور که انتظار می رفت کار نمی کند.
Example: sprintf ( '%02d' , 1 ); ?>این منجر به 01 خواهد شد. با این حال ، تلاش برای یک شناور با دقت کار نمی کند:
این کمی من را دور کرد. برای به دست آوردن نتیجه مورد نظر ، باید دقت (2) و طول جداکننده اعشاری را اضافه کرد "."(1). بنابراین الگوی صحیح خواهد بود
لطفاً برای توضیح بیشتر ، به http://stackoverflow. com/a/28739819/413531 مراجعه کنید.
6 سال پیش
در حین تلاش برای بازپرداخت رشته های طولانی تر با متغیرهای مکرر مانند کافه باشید
Sprintf ("سلام ٪ s. نام شما ٪ s" ، نام $ ، نام $) ؛
برای استفاده از شماره گذاری آرگومان:
Sprintf ("سلام ٪ 1 $ s. نام شما ٪ 1 $ s" ، نام $) ؛
این به شما در ** Runtime ** ، به دلیل "$ s" که به عنوان متغیر اداره می شود ، می شود. اگر هیچ دلار برای جایگزینی ندارید ، اعلام می شود.
راه حل استفاده از نقل قول های منفرد برای جلوگیری از جایگزینی متغیر در رشته است:
Sprintf ('سلام ٪ 1 $ s. نام شما ٪ 1 $ s ، نام $) ؛
اگر به تعویض متغیر نیاز دارید ، باید رشته خود را تقسیم کنید تا آن را در نقل قول های واحد نگه دارید:
Sprintf ("سلام". "٪ 1 $ S". "
3 سال پیش
نمونه قدیمی "میمون" که به من کمک زیادی کرد ، متاسفانه ناپدید شد.
من آن را در اظهار نظر به عنوان یک حافظه دوباره ارسال می کنم.
$ n = 43951789 ؛$ u = - 43951789 ؛$ C = 65 ؛// ascii 65 'a' است
// توجه داشته باشید که Double ٪٪ ، این یک چاپگر شخصیت "٪" را چاپ می کند ("٪٪ b = '٪ b' n" ، $ n) ؛// بازنمایی باینری Printf ("٪٪ C = '٪ C' n" ، $ c) ؛// چاپ کاراکتر ASCII ، همان عملکرد chr () printf ("٪٪ d = '٪ d' n" ، $ n) ؛// PRINTF PRINTFITATION INTEGER استاندارد ("٪٪ E = '٪ e' n" ، $ n) ؛// نماد علمی Printf ("٪٪ u = '٪ u' n" ، $ n) ؛// بازنمایی عدد صحیح بدون امضا از یک چاپ صحیح مثبت ("٪٪ u = '٪ u' n" ، $ u) ؛// بازنمایی عدد صحیح بدون امضا از یک چاپ صحیح منفی ("٪٪ f = '٪ f' n" ، $ n) ؛// چاپ نقطه شناور چاپ ("٪٪ o = '٪ o' n" ، $ n) ؛// بازنمایی اکتال printf ("٪٪ s = '٪ s' n" ، $ n) ؛// بازنمایی رشته Printf ("٪٪ x = '٪ x' n" ، $ n) ؛// بازنمایی شش ضلعی (قسمت پایین) printf ("٪٪ x = '٪ x' n" ، $ n) ؛// بازنمایی شش ضلعی (نمونه فوقانی)
printf ("٪٪+d = '٪+d' n" ، $ n) ؛// مشخصات را روی یک چاپ صحیح مثبت ("٪٪+d = '٪+d' n" ، $ u) امضا کنید.// مشخص کننده را روی یک عدد صحیح منفی امضا کنید
'247523255' ٪ s = '43951789' ٪ x = '29ea6ad' ٪ x = '29ea6ad' ٪+d = '+43951789' ٪+d = '-43951789' *//
$ s = 'میمون' ؛$ t = 'بسیاری از میمون ها' ؛
printf ("[٪ s] n" ، $ s) ؛// چاپ استاندارد رشته Printf ("[٪ 10s] n" ، $ s) ؛// توجیهی سمت راست با فضاهای printf ("[٪ -10s] n" ، $ s) ؛// توجیه چپ با فضاهای printf ("[٪ 010s] n" ، $ s) ؛// Zero-Padding روی رشته های Too Printf ("[٪#10s] n" ، $ S) کار می کند.// از کاراکتر padding سفارشی '#' printf ("[٪ 10. 10s] n" ، $ t) استفاده کنید.// توجیهی چپ اما با برش 10 کاراکتر
12 سال پیش
اگر از مشخصات پیش فرض بالشتک (یک فضا) استفاده می کنید و سپس آن را به HTML چاپ می کنید ، متوجه خواهید شد که HTML چندین فضای را به درستی نمایش نمی دهد. این امر به این دلیل است که هر دنباله ای از فضای سفید به عنوان یک فضای واحد رفتار می شود.
برای غلبه بر این ، من یک تابع ساده نوشتم که جایگزین تمام فضاهای موجود در رشته برگشتی توسط Sprintf () با مرجع موجودیت شخصیت "& nbsp ؛" است. برای دستیابی
//Here is the function: function sprintf_nbsp () $args = func_get_args (); retu str_replace ( ' ' , ' ' , vsprintf ( array_shift ( $args ), array_values ( $args )));>
//Usage (exactly like sprintf): $format = 'The %d monkeys are attacking the [%10s]!' ; $str = sprintf_nbsp ( $format , 15 , 'zoo' ); echo $str ; ?>مثال فوق به تولید می رسد: 15 میمون به [باغ وحش] حمله می کنند!
//The variation that prints the string instead of retuing it: function printf_nbsp () $args = func_get_args (); echo str_replace ( ' ' , ' ' , vsprintf ( array_shift ( $args ), array_values ( $args )));> ?>
14 سال پیش
یک نسخه کامل تر و کاری MB_SPRINTF و MB_VSPRINTF. این باید با هر رمزگذاری "ASCII حفظ" مانند UTF-8 و تمام Charsets ISO-8859 کار کند. این علامت ، بالشتک ، تراز ، عرض و دقت را کنترل می کند. مبادله استدلال انجام نمی شود.
if (! function_exists ( 'mb_sprintf' )) function mb_sprintf ( $format ) $argv = func_get_args () ; array_shift ( $argv ) ; retu mb_vsprintf ( $format , $argv ) ;>>if (! function_exists ('mb_vsprintf')) /*** با تمام رمزگذاری ها در قالب و آرگومان کار می کند.* پشتیبانی شده: علامت ، بالشتک ، تراز ، عرض و دقت.* پشتیبانی نشده: مبادله استدلال.*/ تابع mb_vsprintf (فرمت $ ، $ argv ، $ رمزگذاری = null) اگر (is_null (رمزگذاری $)) $ رمزگذاری = mb_inteal_encoding () ؛
// از UTF-8 در قالب استفاده کنید تا بتوانیم از Flag u in preg_split $ format = mb_convert_encoding (فرمت $ ، "UTF-8" ، رمزگذاری $) استفاده کنیم.
$ newFormat = "" ؛// ایجاد یک قالب جدید در UTF-8 $ newargv = array () ؛// استدلال های نامعلوم در رمزگذاری بدون تغییر
// قالب را در دو بخش تقسیم کنید: $ pre و $ post توسط اولین ٪ -durective // ما همچنین لیست گروه های همسان را دریافت می کنیم ($ pre ، sign $ ، $ filler ، $ align ، اندازه $ ، $ دقت ، نوع $، $ post) = preg_split ("! ٪ (+؟) ('. | [0] |) (-؟) ([1-9] [0-9]*|) (. [1-9.] [0-9]*|) ([٪ a-za-z])! u "، $ format ، 2 ، preg_split_delim_capture) ؛
$ newFormat. = mb_convert_encoding ($ pre ، $ رمزگذاری ، 'utf-8') ؛
if ( $type == '' ) // didn't match. do nothing. this is the last iteration.> elseif ( $type == '%' ) // an escaped % $newformat .= '%%' ;>otherif ($ type == 's') $ arg = array_shift ($ argv) ؛$ arg = mb_convert_encoding ($ arg ، 'utf-8' ، $ رمزگذاری) ؛$ padding_pre = '' ؛$ padding_post = '' ؛
// define padding if ( $size>0) $ arglen = mb_strlen ($ arg ، $ رمزگذاری) ؛if ($ arglen<$size ) if( $filler === '' ) $filler = ' ' ; if ( $align == '-' ) $padding_post = str_repeat ( $filler , $size - $arglen ); else $padding_pre = str_repeat ( $filler , $size - $arglen );>>
// escape % and pass it forward $newformat .= $padding_pre . str_replace ( '%' , '%%' , $arg ) . $padding_post ;> else // another type, pass forward $newformat .= "% $sign$filler$align$size$precision$type " ; $newargv [] = array_shift ( $argv );> $format = strval ( $post );> // Convert new format back from UTF-8 to the original encoding $newformat = mb_convert_encoding ( $newformat , $encoding , 'UTF-8' ); retu vsprintf ( $newformat , $newargv );>> ?>
13 سال پیش
Here's a clean, working version of functions to allow using named arguments instead of numeric ones. ex: instead of sprintf('%1$s', 'Joe');, we can use sprintf('%name$s', array('name' =>'جو')) ؛. من 2 نسخه مختلف را ارائه داده ام: اولین استفاده از نحو مانند PHP (EX: ٪ Name $ S) ، در حالی که دوم از نحو پایتون (EX: ٪ (Name) S) استفاده می کند.
/** * version of sprintf for cases where named arguments are desired (php syntax) * * with sprintf: sprintf('second: %2$s ; first: %1$s', '1st', '2nd'); * * with sprintfn: sprintfn('second: %second$s ; first: %first$s', array( * 'first' => '1st', * 'second'=> '2nd' * )); * * @param string $format sprintf format string, with any number of named arguments * @param array $args array of [ 'arg_name' => 'arg value', . ] replacements to be made * @retu string|false result of sprintf call, or bool false on error */ function sprintfn ( $format , array $args = array()) // map of argument names to their corresponding sprintf numeric argument value $arg_nums = array_slice ( array_flip ( array_keys (array( 0 =>0) + $ args)) ، 1) ؛
// استدلال نامگذاری شده بعدی را پیدا کنید. هر جستجو از انتهای جایگزینی قبلی شروع می شود. برای ($ pos = 0 ؛ preg_match ('/(؟<=%)([a-zA-Z_]w*)(?=$)/' , $format , $match , PREG_OFFSET_CAPTURE , $pos );) <$arg_pos = $match [ 0 ][ 1 ]; $arg_len = strlen ( $match [ 0 ][ 0 ]); $arg_key = $match [ 1 ][ 0 ];
// برنامه نویس مقداری برای آرگومان نامگذاری شده موجود در رشته فرمت ارائه نداد اگر (! array_key_exists ($ arg_key ، $ arg_nums)) user_error ("sprintfn (): آرگومان گمشده" $'" , E_USER_WARNING ); retu false ;>
// replace the named argument with the corresponding numeric one $format = substr_replace ( $format , $replace = $arg_nums [ $arg_key ], $arg_pos , $arg_len ); $pos = $arg_pos + strlen ( $replace ); // skip to end of replacement for next iteration>
retu vsprintf ( $format , array_values ( $args ));>
/** * version of sprintf for cases where named arguments are desired (python syntax) * * with sprintf: sprintf('second: %2$s ; first: %1$s', '1st', '2nd'); * * with sprintfn: sprintfn('second: %(second)s ; first: %(first)s', array( * 'first' => '1st', * 'second'=> '2nd' * )); * * @param string $format sprintf format string, with any number of named arguments * @param array $args array of [ 'arg_name' => 'arg value', . ] replacements to be made * @retu string|false result of sprintf call, or bool false on error */ function sprintfn ( $format , array $args = array()) // map of argument names to their corresponding sprintf numeric argument value $arg_nums = array_slice ( array_flip ( array_keys (array( 0 =>0) + $ args)) ، 1) ؛
// استدلال نامگذاری شده بعدی را پیدا کنید. هر جستجو از انتهای جایگزینی قبلی شروع می شود. برای ($ pos = 0 ؛ preg_match ('/(؟<=%)(([a-zA-Z_]w*))/' , $format , $match , PREG_OFFSET_CAPTURE , $pos );) <$arg_pos = $match [ 0 ][ 1 ]; $arg_len = strlen ( $match [ 0 ][ 0 ]); $arg_key = $match [ 1 ][ 0 ];
// برنامه نویس مقداری برای آرگومان نامگذاری شده موجود در رشته فرمت ارائه نداد اگر (! array_key_exists ($ arg_key ، $ arg_nums)) user_error ("sprintfn (): آرگومان گمشده" $'" , E_USER_WARNING ); retu false ;>
// replace the named argument with the corresponding numeric one $format = substr_replace ( $format , $replace = $arg_nums [ $arg_key ] . '$' , $arg_pos , $arg_len ); $pos = $arg_pos + strlen ( $replace ); // skip to end of replacement for next iteration>
retu vsprintf ( $format , array_values ( $args ));>
دوره ی فارکس...
ما را در سایت دوره ی فارکس دنبال می کنید
برچسب :
نویسنده : پرویز حبّی
بازدید : <-PostHit->
تاريخ : چهارشنبه
18 مرداد
1402 ساعت: 14:47