Преобразование английских чисел в арабские цифры - PullRequest
15 голосов
/ 02 августа 2010

Как я могу преобразовать английские числа, извлекаемые из базы данных, в арабские цифры в PHP.

РЕДАКТИРОВАТЬ: Вот несколько примеров того, как выглядят арабские цифры. Я живу в арабской стране, поэтому, пожалуйста, не объясняйте мне, как выглядят арабские цифры. Если вы можете помочь, хорошо и хорошо. Мне не нужны поддельные идеи.

http://upload.wikimedia.org/wikipedia/commons/thumb/2/21/Arabic_numerals-en.svg/500px-Arabic_numerals-en.svg.png

Ответы [ 6 ]

23 голосов
/ 02 августа 2010

Если вы имеете в виду то, что Википедия называет восточные арабские / индикативные цифры , должна быть сделана простая операция замены.

$western_arabic = array('0','1','2','3','4','5','6','7','8','9');
$eastern_arabic = array('٠','١','٢','٣','٤','٥','٦','٧','٨','٩');

$str = str_replace($western_arabic, $eastern_arabic, $str);
6 голосов
/ 16 августа 2015

Определения

  • Западные арабские цифры: «1234567890».
  • Восточные арабские цифры: «١٢٣٤٥٦٧٨٩٠».

Ответ

Я написал пару функций (gist.github.com) некоторое время назад.

Демонстрация (3v4l.org)

    echo arabic_w2e("1234567890"); // Outputs: ١٢٣٤٥٦٧٨٩٠
    echo arabic_e2w("١٢٣٤٥٦٧٨٩٠"); // Outputs: 1234567890

Код

<?php

/**
 * Converts numbers in string from western to eastern Arabic numerals.
 *
 * @param  string $str Arbitrary text
 * @return string Text with western Arabic numerals converted into eastern Arabic numerals.
 */
function arabic_w2e($str)
{
    $arabic_eastern = array('٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩');
    $arabic_western = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
    return str_replace($arabic_western, $arabic_eastern, $str);
}

/**
 * Converts numbers from eastern to western Arabic numerals.
 *
 * @param  string $str Arbitrary text
 * @return string Text with eastern Arabic numerals converted into western Arabic numerals.
 */
function arabic_e2w($str)
{
    $arabic_eastern = array('٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩');
    $arabic_western = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
    return str_replace($arabic_eastern, $arabic_western, $str);
}
3 голосов
/ 16 ноября 2011

Или вы можете просто скачать и использовать этот класс из: http://www.phpclasses.org/package/6626-PHP-Convert-numbers-to-Arabic-representation.html (протестировано и работает). Приветствия.

0 голосов
/ 02 июля 2016

Простое решение с strtr :

strtr($str, ['٠','١','٢','٣','٤','٥','٦','٧','٨','٩']);

Для перевода с восточного арабского на арабский:

strtr($str, array_flip(['٠','١','٢','٣','٤','٥','٦','٧','٨','٩']));
0 голосов
/ 02 августа 2010

Я бы посоветовал вам попробовать использовать файл ресурсов для другого языка, особенно если его содержимое известно.Пример: 2 файла языковых файлов, 1 с именем language_EN, другой language_AR, где langauge_EN - для хранения значений на английском языке, и language_AR - для арабского.

, поэтому, например, вы хотите сохранить число «1»

в langauge_EN, сделай что-нибудь подобное.number.one = 1

затем в langauge_AR, (притворимся, что x - это число «1» на арабском языке, но я думаю, что Юникод предпочтительнее)базы данных и зная, что это число, ваш необработанный результат получается «один».

, поэтому используйте число. + [результат из базы данных] для загрузки из langauage_AR Этот метод довольно широко используется в веб-страницах, которые позволяютпереключение языка.Так что в любое время вам нужно конвертировать обратно в английский, просто переключитесь обратно на language_EN.Это работает не только для номера.Б-г удачи

0 голосов
/ 02 августа 2010

Вы пытаетесь конвертировать, например, Sixty-девять в تسعة وستون?Попробуйте, можете ли вы позвонить в службу Google Translate или другую службу перевода.В противном случае вам следует написать собственный синтаксический анализатор цифра и использовать свои знания арабского языка для его перевода на арабский язык.(Но использовать службу перевода было бы намного проще.) (Впрочем, PHP может уже иметь функцию, которая правильно записывает цифры и цифры.)

...