PDA

View Full Version : آموزش: توابع تبدیل اعداد لاتین به فارسی و تبدیل اعداد فارسی به لاتین



arastu
پنج شنبه 05 اسفند 1389, 13:59 عصر
تبدیل اعداد لاتین(انگلیسی) به اعداد فارسی(پارسی)


/**
* convert latin number to persian
*
* @param string $string
* string that we want change number format
*
* @return formated string
*/
function ta_persian_num($string) {
//arrays of persian and latin numbers
$persian_num = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
$latin_num = range(0, 9);

$string = str_replace($latin_num, $persian_num, $string);

return $string;
}
تبدیل اعداد فارسی(پارسی) به اعداد لاتین(انگلیسی)


/**
* convert persian number to latin
*
* @param string $string
* string that we want change number format
*
* @return formated string
*/
function ta_latin_num($string) {
//arrays of persian and latin numbers
$persian_num = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
$latin_num = range(0, 9);

$string = str_replace($persian_num, $latin_num, $string);

return $string;
}

MSN_Issue
پنج شنبه 05 اسفند 1389, 19:39 عصر
از این راه هم میشه اعداد رو فارسی کرد :

function Convertnumber2farsi($str) {
$out='';
$str=(string) $str;
for($i=0;$i<strlen($str);$i++) {
if(ctype_digit($str[$i])) {
$out.=pack("C*",0xDB,0xB0+$str[$i]);
} else {
$out.=$str[$i];
}
}
return $out;
}

arastu
شنبه 07 اسفند 1389, 08:37 صبح
دوست عزیز من تابعی که شما نوشتین رو با تابع های که خودم نوشتم از لحاظ سرعت با هم مقایسه کردم. برای این کار زمان اجرای تابع رو اندازه گرفتم.
تابع شما در سیستم من و شرایط آزمایش حدود ۰/۰۰۲ ثانیه زمان برای اجرا شدن نیاز داشت، که این زمان در تابعی که من نوشتم حدود ۰/۰۰۰۱ ثانیه است.
من حدث می زنم که این تابع الگوریتم و حلقه آن بهینه نیست.
روش آزمایش کردنم هم به صورت زیر بوده

$str = '5932165479848716357876578645768441357896451435789 76543574897643548678643687684758786745486786454786 75646876846873847867458768487643769674687468453765 46874357684687537468486757687486768748674897427421
35114531374798435121531454876878766578687687654867 46541657864784638726871763873678637892196187163742 68742687421686937277168411111419364396519';




$timer = microtime(TRUE);
$ret = FUNCTION_NAME($str); //function that tested
$timer = microtime(TRUE) - $timer;


echo $timer;

vesal67
دوشنبه 26 بهمن 1394, 14:08 عصر
تابع اول روی این اعداد جواب نمیده
٠١٢٣٤٥٦٧٨٩
روی این اعداد جواب میده
۰۱۲۳۴۵۶۷۸۹
توجه کنید دو سری اعدا با هم دیگه فرق میکنن.برای مثال به عدد های 4و5و6 توجه کنید.
بهتر از این تابع استفاده بشه.


// تبدیل عدد فارسی به انگلیسی
function fa_num_to_en($string) {
$persian1 = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
$persian2 = array('٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩');
$num = range(0, 9);
$string=str_replace($persian1, $num, $string);
return str_replace($persian2, $num, $string);
}

رضا قربانی
یک شنبه 03 مرداد 1395, 12:13 عصر
توابع جلالی خیلی راحت این کارو انجام میده


tr_num('۵ 5 abc ا ب پ');// out: 55 abc ا ب پ
tr_num('۵5tت','fa');// out: ۵۵ abc ا ب پ
tr_num('18.25','fa');// out: ۱۸٫۲۵
tr_num('18.25','fa','/');// out: ۱۸/۲۵
tr_num('18.25','fa','.');// out: ۱۸.۲۵
tr_num('۱۸٫۲۵');// out: 18.25
tr_num('۱۸/۲۵');// out: 18/25
tr_num('۱۸/۲۵','en','/');// out: 18.25

پارامتر آخرو می تونید نذارید . مهم نیست

hanjareh_talaei
یک شنبه 07 شهریور 1395, 20:16 عصر
اینجا کلی تابع مفید داره
http://stackoverflow.com/questions/15247405/how-to-replace-numbers-in-body-to-persian-numbers