jeronimofagundes / php-roman-numbers
该包已被废弃,不再维护。没有建议的替代包。
将罗马数字从/到十进制数字进行转换的辅助工具。
v1.0.1
2023-10-02 03:41 UTC
Requires
- php: ^7.3
Requires (Dev)
- phpunit/phpunit: ^8
README
PHP中的罗马数字支持
架构
实现了一个简单的辅助类,名为"\Jeronimofagundes\Numbers\Roman\Helper",它包含两个方法用于将阿拉伯数字转换为罗马数字,反之亦然。
遵循PHP FIG的PSR-4自动加载标准进行了自动加载。
源代码位于"src"目录中。依赖项位于"vendor"目录中。测试位于"tests"文件夹中。
测试
为了执行单元测试,我使用了PHPUnit框架。有一个类包含对Helper类的测试。
问题解决
阿拉伯数字到罗马数字的转换
首先检查阿拉伯数字是否适合范围[1-3999]。这个范围由维基百科的罗马数字文章定义。
之后,我将输入数字左边的零填充,使其达到4位长。例如:14变成0014。
下一步是将每个字符转换为相应的罗马数字。这些对应关系映射在Helper类中的常量TO_ROMAN中。有"个位"、"十位"、"百位"和"千位"的映射。这样,第一个零被忽略,第二个零也被忽略,1变成X,4变成IV。这意味着返回的字符串是XIV。
罗马数字到阿拉伯数字的转换
此转换首先检查给定的罗马数字是否有效。我使用正则表达式做了这个。
我在Helper类中的常量FROM_ROMAN中映射了一些对应关系。使用它,我以以下方式读取罗马数字
- 我从最左边的字符开始。
- 我读取两个字符。如果在FROM_ROMAN数组中映射了此对应关系,这意味着它是一个减法对应关系(如IV、XC或CM),并且它将被转换。我们将指针右移两个字符,再次进入步骤2。
- 如果没有在FROM_ROMAN数组中找到对应关系,这意味着它不是减法对应关系。因此,我们只读取一个字符。该字符将在数组中有对应关系,该值将被添加到最终结果中。我们将指针右移一个字符,再次回到步骤2。
- 处理结束时,罗马数字已经完成。
如何使用此库
为了使用此库,他/她可以使用composer,这是标准的PHP库包管理器。
composer require "jeronimofagundes/php-roman-numbers:1.0.0"
并在他的/她的代码中使用以下类
...
use \Jeronimofagundes\Numbers\Roman\Helper;
...
echo Helper::fromArabic(2019); // prints MMXIX
echo Helper::toArabic('MMXIX'); // prints 2019
...
我包含了一个名为example.php的文件,展示了如何使用库。要运行它,请按照以下步骤操作
- 克隆此存储库并进入它
git clone https://github.com/jeronimofs/php-roman-numbers.git cd php-roman-numbers
- 拉取Docker镜像
docker pull jeronimofagundes/php-composer:latest
- 使用composer安装依赖项
docker run -it -u="$UID" -v $PWD:/app -w="/app" jeronimofagundes/php-composer:latest composer install
- 运行example.php文件
docker run -it -u="$UID" -v $PWD:/app -w="/app" jeronimofagundes/php-composer:latest php example.php
如何测试它
我们需要使用PHPUnit执行测试,我们将使用Docker来执行。请按照以下步骤操作
- 克隆此存储库并进入它
git clone https://github.com/jeronimofs/php-roman-numbers.git cd php-roman-numbers
- 拉取Docker镜像
docker pull jeronimofagundes/php-composer:latest
- 运行PHPUnit
docker run -it -u="$UID" -v $PWD:/app -w="/app" jeronimofagundes/php-composer:latest /app/phpunit --bootstrap /app/vendor/autoload.php /app/tests