Как я могу конвертировать персидские / арабские цифры на английские номера с простой функцией?
Персидские / арабские цифры:
۰ // -> 0 ۱ // -> 1 ۲ // -> 2 ۳ // -> 3 ۴ // -> 4 ۵ // -> 5 ۶ // -> 6 ۷ // -> 7 ۸ // -> 8 ۹ // -> 9
номера по юникоду:
$num0="۰"; $num1="۱"; $num2="۲"; $num3="۳"; $num4="۴"; $num5="۵"; $num6="۶"; $num7="۷"; $num8="۸"; $num9="۹";
Вот короткая функция:
function convert($string) { $persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']; $arabic = ['٩', '٨', '٧', '٦', '٥', '٤', '٣', '٢', '١','٠']; $num = range(0, 9); $convertedPersianNums = str_replace($persian, $num, $string); $englishNumbersOnly = str_replace($arabic, $num, $convertedPersianNums); return $englishNumbersOnly; }
Вы можете использовать unicode вместо символов в $persian
(я думаю).
это лучше. у нас есть два типа цифр в арабском и персидском языках. мы должны все изменить.
function convert($string) { $persinaDigits1= array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'); $persinaDigits2= array('٩', '٨', '٧', '٦', '٥', '٤', '٣', '٢', '١', '٠'); $allPersianDigits=array_merge($persinaDigits1, $persinaDigits2); $replaces = array('0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9'); return str_replace($allPersianDigits, $replaces , $string); }
спасибо @Palladium
Будьте осторожны при копировании кода! Дважды проверьте, как массив представлен в вашем редакторе, или у вас будут проблемы!
Я использую эту функцию. Он преобразует как персидский, так и арабский цифры на английский:
function faTOen($string) { return strtr($string, array('۰'=>'0', '۱'=>'1', '۲'=>'2', '۳'=>'3', '۴'=>'4', '۵'=>'5', '۶'=>'6', '۷'=>'7', '۸'=>'8', '۹'=>'9', '٠'=>'0', '١'=>'1', '٢'=>'2', '٣'=>'3', '٤'=>'4', '٥'=>'5', '٦'=>'6', '٧'=>'7', '٨'=>'8', '٩'=>'9')); }
образец:
echo faTOen("۰۱۲۳۴۵۶۷۸۹٠١٢٣٤٥٦٧٨٩"); // 01234567890123456789
$fmt = numfmt_create('fa', NumberFormatter::DECIMAL); echo numfmt_parse($fmt, "۵") . "\n"; // 5
Для преобразования всех персидских чисел в английский формат вы можете использовать эту функцию:
function Convertnumber2english($srting) { $srting = str_replace('۰', '0', $srting); $srting = str_replace('۱', '1', $srting); $srting = str_replace('۲', '2', $srting); $srting = str_replace('۳', '3', $srting); $srting = str_replace('۴', '4', $srting); $srting = str_replace('۵', '5', $srting); $srting = str_replace('۶', '6', $srting); $srting = str_replace('۷', '7', $srting); $srting = str_replace('۸', '8', $srting); $srting = str_replace('۹', '9', $srting); return $srting; }
Вероятно, лучший ответ, использующий какую-то замену, но для его кодирования, это было бы лучше, чем у вас:
$len = strlen($arabic); for ( $i = 0; $i < $len; ++$i ) { switch( $arabic[$i] ) { case '۰': $english .= '0'; break; case '۱': $english .= '1'; break; case '۲': $english .= '2'; break; // and so on case '۹': $english .= '9'; break; default: $english .= $arabic[$i]; } }
Это должно сделать это.
как насчет чего-то подобного …
$number = arbic_to_english("۱۳"); echo $number; // 13 function arbic_to_english($number) { $english_number = 0; $matches = array(); preg_match_all('/&#\d{4};/', $number, $matches); if(!count($matches) || !count($matches[0])) { throw new Exception('Invalid number'); } $power = count($matches[0]) - 1; foreach($matches[0] as $arbic_digit) { $english_digit = preg_replace('/&#\d{2}(\d{2});/', '$1', $arbic_digit) - 76; $english_number += $english_digit * pow(10, $power--); } return $english_number; }
Не нужно разделять входную строку.
private function convert($input) { $unicode = array('۰', '۱', '۲', '۳', '٤', '٥', '٦', '۷', '۸', '۹'); $english = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'); $string = str_replace($unicode, $english , $input); return $string; }
Примеры
convert("۱۲۳٤٥"); //output : 12345 convert("۱۲34٥"); //output : 12345 convert("12345"); //output : 12345
Из-за того, что люди в Персидском и Арабском регионе могут использовать друг друга, это полное решение для конвертирования обоих типов.
function convert2english($string) { $newNumbers = range(0, 9); // 1. Persian HTML decimal $persianDecimal = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'); // 2. Arabic HTML decimal $arabicDecimal = array('٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'); // 3. Arabic Numeric $arabic = array('٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'); // 4. Persian Numeric $persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'); $string = str_replace($persianDecimal, $newNumbers, $string); $string = str_replace($arabicDecimal, $newNumbers, $string); $string = str_replace($arabic, $newNumbers, $string); return str_replace($persian, $newNumbers, $string); }