PHP တွင် Sprintf သည်အလွန်အသုံးများသော format formation function ဖြစ်သည်။ ၎င်းသည်သတ်မှတ်ထားသောပုံစံနှင့်အညီ variable များကို strings များသို့ format များပြုလုပ်နိုင်ပြီးစာသားထုတ်လုပ်ခြင်း, သစ်ထုတ်လုပ်ခြင်းနှင့်ဒေတာများကဲ့သို့ဖြစ်ရပ်များတွင်မကြာခဏအသုံးပြုသည်။ သို့သော်ကျွန်ုပ်တို့သည် Sprintf function ကိုအသုံးပြုသောအခါတရုတ်စာလုံးများကိုလုပ်ဆောင်ရန်ကျွန်ုပ်တို့သည် Alignment ချွင်းချက်များ၏ပြ problem နာကိုကျွန်ုပ်တို့ကြုံတွေ့ရနိုင်သည်။ ဤဆောင်းပါးသည်အဘယ်ကြောင့်ဤပြ problem နာဖြစ်ပေါ်ရကြောင်းနှင့်သက်ဆိုင်သောဖြေရှင်းနည်းများကိုအဘယ်ကြောင့်ဖြစ်ပေါ်လာသည်ကိုလေ့လာလိမ့်မည်။
Sprintf function ကိုအသုံးပြုသောအခါ format ချထားသောကြိုးများသည်အများအားဖြင့်ညှိနှိုင်းခြင်း, ကွင်းဆင်းအကျယ်စသည့် parameters များကိုသတ်မှတ်ရန်သတ်မှတ်ထားသည်။ ဥပမာအားဖြင့်ဘုံ format string သည် % 10S ဖြစ်ပြီး 10 ခုနှင့်အ 0 တ်အထည်တစ်ခုဖြစ်ပြီးအ 0 တ်အထည်, အကယ်. 0 င်လာသည့်ဒေတာအရှည်သည် 10 ထက်နည်းပါကသတ်မှတ်ထားသော width ကိုရောက်ရှိသည်အထိ Sprintf သည် ဘယ်ဘက်ရှိအာကာသထဲကိုအလိုအလျောက်ဖြည့်လိမ့်မည်။
သို့သော်တရုတ်စာလုံးများနှင့်ဆက်ဆံရာတွင်အခြေအနေသည်ရှုပ်ထွေးလာသည်။ တရုတ်စာလုံးများကို encoding သည်များသောအားဖြင့် UTF-8 ဖြစ်ပြီးတရုတ်ဇာတ်ကောင်တစ် ဦး ချင်း စီ သည် 3 bytes များယူနိုင်သည်။ ထို့ကြောင့်ကျွန်ုပ်တို့သည်တရုတ်စာလုံးများဖြင့်ဖြတ်သန်းသွားသောအခါ Sprintf က သူတို့ကို bytes များစွာအဖြစ်တွက်ချက်သည်။
ဥပမာအားဖြင့်:
$str = sprintf("%10s", "မင်္ဂလာပါ");
echo $str;
UTF-8 encoding တွင် " ဟဲလို" သည်စာလုံး 2 လုံးအစား 6 bytes 6 ခုပါ 0 င်သည်။
ဤပြ problem နာကိုဖြေရှင်းရန် Sprintf function သည် string ကိုဇာတ်ကောင်အကျယ်အ 0 န်းဖြင့်ကိုင်တွယ်ရန်သေချာစေရန်လိုအပ်သည်။ ၎င်းကိုနည်းလမ်းနှစ်မျိုးဖြင့်ရရှိနိုင်သည်။
တရုတ်အက္ခရာများကိုမှန်ကန်စွာလုပ်ဆောင်ရန်အသုံးပြုသော PHP သည် byte string processing library (mbstring) ကိုထောက်ပံ့ပေးသည်။ MB_Strlen သည် string တစ်ခု၏အရှည်ကိုတွက်ချက်ရန်အသုံးပြုသောအခါ၎င်းကိုစာလုံးများဖြင့်တွက်ချက်သည်။
ဥပမာအားဖြင့်:
// string အကျယ်ကိုသတ်မှတ်ပါ
$str = "မင်္ဂလာပါ";
$width = 10;
$len = mb_strlen($str, 'UTF-8'); // ဇာတ်ကောင်အရေအတွက်ကိုရယူပါ
// ဖြည့်နေရာများ၏နံပါတ်တွက်ချက်
$padding = $width - $len;
// နှစ်ဖက်စလုံးတွင်နေရာများကိုဖြည့်ပါ
$formatted = str_pad($str, $width, " ", STR_PAD_LEFT);
echo $formatted;
MB_strinlen မှတဆင့် strings ၏ဇာတ်ကောင်အရေအတွက်ကိုရရှိပြီးနောက်ကျွန်ုပ်တို့သည် String ကိုဖြည့်ရန် string ကိုဖြည့်ရန် string ကိုဖြည့်ရန် string ကိုအသုံးပြုသည်။
အကယ်. Mbstring extension ကိုမဖွင့်ပါကဇာတ်ကောင်တစ်ခုစီ၏အကျယ်များကိုလည်းကိုယ်တိုင်တွက်ချက်နိုင်သည်။ ဥပမာအားဖြင့် UTF-8-8-encoded တရုတ်စာလုံးများအတွက်၎င်းတို့၏အကျယ်ကို PHP တွင်စာလုံးများဖြင့်တွက်ချက်နိုင်ပြီးဤ width တွင်လုပ်ဆောင်သည်။ ဤနည်းလမ်းသည်အတော်အတန်ရှုပ်ထွေးသော်လည်း၎င်းသည်ကိုက်ညီမှုမရှိသော bytes နှင့် character width တို့၏ပြ problem နာကိုလည်းရှောင်ရှားနိုင်သည်။
function get_char_width($str) {
$width = 0;
$len = mb_strlen($str, 'UTF-8');
for ($i = 0; $i < $len; $i++) {
$char = mb_substr($str, $i, 1, 'UTF-8');
// တရုတ်စာလုံးများကိုသိမ်းပိုက်သည်ဟုယူဆပါ 2 ဇာတ်ကောင်အကျယ်
if (preg_match("/[\x{4e00}-\x{9fa5}]/u", $char)) {
$width += 2; // တရုတ်ဇာတ်ကောင်အကျယ်
} else {
$width += 1; // အင်္ဂလိပ်ဇာတ်ကောင်အကျယ်
}
}
return $width;
}
// နမူနာ
$str = "မင်္ဂလာပါ";
$width = 10;
$char_width = get_char_width($str);
// ဖြည့်နေရာများ၏နံပါတ်တွက်ချက်
$padding = $width - $char_width;
$formatted = str_pad($str, $width + $padding, " ", STR_PAD_LEFT);
echo $formatted;
ဤနည်းလမ်းသည်၎င်း၏အကျယ်ဇာတ်ကောင်ကိုဇာတ်ကောင်များဖြင့်ခွဲခြမ်းစိတ်ဖြာခြင်းနှင့် strow_pad ကို အသုံးပြု. strow_pad ကို သုံး. strow_pad ကို သုံး. stigring ကိုမှန်ကန်စွာညှိပေးသည်။
အချုပ်အားဖြင့်ဆိုရလျှင် Sprintf function ကို default byte width ကို အသုံးပြု. format လုပ်ထားပြီးတရုတ်စာလုံးများကိုထုတ်လုပ်သည့်အခါ alignment alignment alignement ခြွင်းချက်တစ်ခုဖြစ်ပေါ်စေသည်။ ဇာတ်ကောင်အကျယ်ကိုတွက်ချက်ရန် Mbstring function library တွင် Mbstring function library တွင် Mbstring function library တွင် MB_strinlen ကို အသုံးပြု. ဤပြ problem နာကိုကျွန်ုပ်တို့ဖြေရှင်းနိုင်သည်။ မည်သည့်နည်းအားဖြင့်, ၎င်းသည်တရုတ်အက္ခရာများကို output ကို output လုပ်သည့်အခါမျှော်လင့်ထားသည့်အတိုင်းမျှော်လင့်ထားသည့်အတိုင်း align လုပ်ထားကြောင်းသေချာစေသည်။