Преобразование индо-арабских цифр в арабские цифры на PHP
Арабские цифры, к которым мы привыкли, используются в большинстве стран мира и составляют набор из десяти знаков: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9; для записи чисел в десятичной системе счисления. Но арабские и индо-арабские цифры являются видоизменёнными начертаниями индийских цифр, приспособленными к арабскому письму.
| Арабские цифры, используемые в арабских странах Африки (кроме Египта) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 
| Индо-арабские цифры, используемые в арабских странах Азии и в Египте | ٠ | ١ | ٢ | ٣ | ٤ | ٥ | ٦ | ٧ | ٨ | ٩ | 
| Персидские цифры | ۰ | ۱ | ۲ | ۳ | ۴ | ۵ | ۶ | ۷ | ۸ | ۹ | 
| Индийские цифры (в письме деванагари), используемые в Индии | ० | १ | २ | ३ | ४ | ५ | ६ | ७ | ८ | ९ | 
Само название «арабские цифры» образовалось исторически, из-за того, что именно арабы распространяли десятичную позиционную систему счисления. Цифры, которые используют в арабских странах Азии и в Египте (называемые арабами "индийскими цифрами"), по начертанию сильно отличаются от используемых в европейских странах.
Преобразование индо-арабских цифр в арабские цифры может понадобиться например для корректной валидации номера телефона. Использование функции str_replace не дает желаемого результата. Но разбив строку на символы можно их сравнить и заменить, и в дальнейшем объединить:
<?php
function arabic_convert($str = ''){
    $str_list = preg_split('//u', $str, null, PREG_SPLIT_NO_EMPTY);
    if( !empty($str_list) ){
        $transform_symbols = array(
            '٠' => '0',
            '١' => '1',
            '٢' => '2',
            '٣' => '3',
            '٤' => '4',
            '٥' => '5',
            '٦' => '6',
            '٧' => '7',
            '٨' => '8',
            '٩' => '9',
        );
        $str_transform = array();
        foreach ($str_list as $str_item){
            if( isset($transform_symbols[$str_item]) ){
                $str_transform[] = $transform_symbols[$str_item];
            }else{
                $str_transform[] = $str_item;
            }
        }
        $str = implode('', $str_transform);
    }
    return $str;
}
	
Добавить комментарий