PDA

View Full Version : سوال: لطفا یه تابع معرفی کنید که بتونه 3 رقم 3 رقم از اعداد جدا کنه و بین اونها کاراکتر ، قرار بده



idocsidocs
چهارشنبه 15 شهریور 1391, 16:26 عصر
منظورم اینه که عدد 1234567890 به 1،234،567،890 تبدیل بشه.

Reza1607
چهارشنبه 15 شهریور 1391, 17:38 عصر
تابع number‎_format

faravaghi
چهارشنبه 15 شهریور 1391, 17:57 عصر
سلام،
البته همون تابعی که دوستمون معرفی کردن درسته ولی یه جاهایی کارایی نداره مثل سرورهای ویندوزی!

این تابع میتونه کمک کنه، منم ازش استفاده کردم جواب داد.



public function money_format($format, $number)
{
$regex = '/%((?:[\^!\-]|\+|\(|\=.)*)([0-9]+)?'.
'(?:#([0-9]+))?(?:\.([0-9]+))?([in%])/';
if (setlocale(LC_MONETARY, 0) == 'C') {
setlocale(LC_MONETARY, '');
}
$locale = localeconv();
preg_match_all($regex, $format, $matches, PREG_SET_ORDER);
foreach ($matches as $fmatch) {
$value = floatval($number);
$flags = array(
'fillchar' => preg_match('/\=(.)/', $fmatch[1], $match) ?
$match[1] : ' ',
'nogroup' => preg_match('/\^/', $fmatch[1]) > 0,
'usesignal' => preg_match('/\+|\(/', $fmatch[1], $match) ?
$match[0] : '+',
'nosimbol' => preg_match('/\!/', $fmatch[1]) > 0,
'isleft' => preg_match('/\-/', $fmatch[1]) > 0
);
$width = trim($fmatch[2]) ? (int)$fmatch[2] : 0;
$left = trim($fmatch[3]) ? (int)$fmatch[3] : 0;
$right = trim($fmatch[4]) ? (int)$fmatch[4] : 0;//$locale['int_frac_digits'];
$conversion = $fmatch[5];

$positive = true;
if ($value < 0) {
$positive = false;
$value *= -1;
}
$letter = $positive ? 'p' : 'n';

$prefix = $suffix = $cprefix = $csuffix = $signal = '';

$signal = $positive ? $locale['positive_sign'] : $locale['negative_sign'];
switch (true) {
case $locale["{$letter}_sign_posn"] == 1 && $flags['usesignal'] == '+':
$prefix = $signal;
break;
case $locale["{$letter}_sign_posn"] == 2 && $flags['usesignal'] == '+':
$suffix = $signal;
break;
case $locale["{$letter}_sign_posn"] == 3 && $flags['usesignal'] == '+':
$cprefix = $signal;
break;
case $locale["{$letter}_sign_posn"] == 4 && $flags['usesignal'] == '+':
$csuffix = $signal;
break;
case $flags['usesignal'] == '(':
case $locale["{$letter}_sign_posn"] == 0:
$prefix = '(';
$suffix = ')';
break;
}
if (!$flags['nosimbol']) {
$currency = $cprefix .
($conversion == 'i' ? $locale['int_curr_symbol'] : $locale['currency_symbol']) .
$csuffix;
} else {
$currency = '';
}
$space = $locale["{$letter}_sep_by_space"] ? ' ' : '';

$value = number_format($value, $right, $locale['mon_decimal_point'],
$flags['nogroup'] ? '' : $locale['mon_thousands_sep']);
$value = @explode($locale['mon_decimal_point'], $value);

$n = strlen($prefix) + strlen($currency) + strlen($value[0]);
if ($left > 0 && $left > $n) {
$value[0] = str_repeat($flags['fillchar'], $left - $n) . $value[0];
}
$value = implode($locale['mon_decimal_point'], $value);
if ($locale["{$letter}_cs_precedes"]) {
$value = $prefix . $currency . $space . $value . $suffix;
} else {
$value = $prefix . $value . $space . $currency . $suffix;
}
if ($width > 0) {
$value = str_pad($value, $width, $flags['fillchar'], $flags['isleft'] ?
STR_PAD_RIGHT : STR_PAD_LEFT);
}

$format = str_replace($fmatch[0], $value, $format);
}
return $format;
}



اینم طرز استفاده از تابع:


money_format('%!i', $monyfield)

idocsidocs
چهارشنبه 15 شهریور 1391, 18:11 عصر
تابع number‎_format


یاد قدیما که پی اچ پی یاد می گرفتم بخیر ! اصلا این تابع یادم رفته بود !

رضا قربانی
چهارشنبه 15 شهریور 1391, 21:09 عصر
یاد قدیما که پی اچ پی یاد می گرفتم بخیر ! اصلا این تابع یادم رفته بود !
و برنامه نویس ها دکمه تشکر رو آفریدند.

idocsidocs
چهارشنبه 15 شهریور 1391, 21:38 عصر
و برنامه نویس ها دکمه تشکر رو آفریدند. شما نمی یای نمی یای، وقتی هم می یای یه تیکه می ندازی . . .

می خوای منم یه تیکه بندازم و ببینیم کی ماهر تره؟

در ضمن تعداد تشکرهایی که کردم هم کم نبوده ها ! دو برابر شما تشکر کردم ولی هنوز کسی رو اینطوری نصیحت نکردم !