Преобразование индо-арабских цифр в арабские цифры на PHP

PHP
/
2017-08-16 17:29
Просмотры: 145

Арабские цифры, к которым мы привыкли, используются в большинстве стран мира и составляют набор из десяти знаков: 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;
}

Добавить комментарий

comments powered by Disqus