CodeIgniter 4: Как преобразовать числа в слова в CodeIgniter 4
В этом уроке мы рассмотрим концепцию преобразование чисел в слова в CodeIgniter 4. Статья содержит закрытую информацию о преобразовании чисел в слова с использованием CodeIgniter.
Если вы ищете решение, как преобразовать числа в слова с помощью CodeIgniter 4, то это руководство поможет вам в этом. Руководство очень простое для понимания и внедрения в ваш код.
Число в слова означает:
4500: Four Thousand and Five Hundreds
Давайте начнем.
Установка CodeIgniter 4
Для установки CodeIgniter 4 выполните следующую команду в терминале. Убедитесь, что composer у вас должен быть установлен.
$ composer create-project codeigniter4/appstarter codeigniter-4
Предположим, что вы успешно установили приложение в свою локальную систему.
Настройка .env
Когда мы установим CodeIgniter 4, у нас будет файл env в корне проекта. Чтобы использовать переменные окружения, то есть использовать переменные в глобальной области видимости, нам нужно переименовать env в .env.
Либо мы можем сделать это через переименование файла. Также это можно сделать с помощью команды терминала.
Откройте проект в терминале
$ cp env .env
Вышеприведенная команда создаст копию файла env в файл .env.
Теперь мы готовы использовать переменные среды.
Включите режим разработки
CodeIgniter по умолчанию запускается в режиме production. Вам необходимо перевести его в режим development, чтобы увидеть любую ошибку, если вы работаете с приложением.
Откройте файл .env в корневой папки.
Найдите:
# CI_ENVIRONMENT = production
Измените на:
CI_ENVIRONMENT = development
Теперь приложение находится в режиме разработки.
Метод #1: Число в словах в контроллере
Рассмотрим контроллер приложения. В этом контроллере мы создадим метод, который будет обрабатывать преобразование чисел в слова.
Откройте проект в терминале и создайте этот контроллер:
$ php spark make:controller DemoController
Команда создаст файл контроллера DemoController.php в папке /app/Controllers.
Откройте файл DemoController.php и напишите в нем следующий код
DemoController.php
<?php
namespace App\Controllers;
use App\Controllers\BaseController;
class DemoController extends BaseController
{
public function index()
{
$word = $this->numberToWord(120);
print($word);
echo "<br>";
$word = $this->numberToWord(4500);
print($word);
echo "<br>";
$word = $this->numberToWord(58010);
print($word);
}
public function numberToWord($num = '')
{
$num = (string) ((int) $num);
if ((int) ($num) && ctype_digit($num)) {
$words = array();
$num = str_replace(array(',', ' '), '', trim($num));
$list1 = array(
'', 'one', 'two', 'three', 'four', 'five', 'six', 'seven',
'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen',
'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'
);
$list2 = array(
'', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty',
'seventy', 'eighty', 'ninety', 'hundred'
);
$list3 = array(
'', 'thousand', 'million', 'billion', 'trillion',
'quadrillion', 'quintillion', 'sextillion', 'septillion',
'octillion', 'nonillion', 'decillion', 'undecillion',
'duodecillion', 'tredecillion', 'quattuordecillion',
'quindecillion', 'sexdecillion', 'septendecillion',
'octodecillion', 'novemdecillion', 'vigintillion'
);
$num_length = strlen($num);
$levels = (int) (($num_length + 2) / 3);
$max_length = $levels * 3;
$num = substr('00' . $num, -$max_length);
$num_levels = str_split($num, 3);
foreach ($num_levels as $num_part) {
$levels--;
$hundreds = (int) ($num_part / 100);
$hundreds = ($hundreds ? ' ' . $list1[$hundreds] . ' Hundred' . ($hundreds == 1 ? '' : 's') . ' ' : '');
$tens = (int) ($num_part % 100);
$singles = '';
if ($tens < 20) {
$tens = ($tens ? ' ' . $list1[$tens] . ' ' : '');
} else {
$tens = (int) ($tens / 10);
$tens = ' ' . $list2[$tens] . ' ';
$singles = (int) ($num_part % 10);
$singles = ' ' . $list1[$singles] . ' ';
}
$words[] = $hundreds . $tens . $singles . (($levels && (int) ($num_part)) ? ' ' . $list3[$levels] . ' ' : '');
}
$commas = count($words);
if ($commas > 1) {
$commas = $commas - 1;
}
$words = implode(', ', $words);
$words = trim(str_replace(' ,', ',', ucwords($words)), ', ');
if ($commas) {
$words = str_replace(',', ' and', $words);
}
return $words;
} else if (!((int) $num)) {
return 'Zero';
}
return '';
}
}
Добавьте маршрут
Откройте файл Routes.php из папки /Config и добавьте в него этот маршрут.
Routes.php
$routes->get("number-to-words", "DemoController::index");
Когда мы вызовем маршрут, результатом будет:
Four Thousand and Five Hundreds
Fifty Eight Thousand and Ten
Метод #2: Число в слова (Custom Helper)
Здесь мы создадим пользовательский хелпер CodeIgniter, т.е. NumberToWord(), с помощью которого мы зарегистрируем концепцию преобразования чисел в слова.
Нам нужно зарегистрировать пользовательский хелпер в CodeIgniter 4
- Создайте файл number_helper.php в папке /app/Helpers.
Откройте файл number_helper.php и напишите в нем этот код.
number_helper.php
<?php
if (!function_exists("numberToWord")) {
// Number to words
function numberToWord($num = '')
{
$num = (string) ((int) $num);
if ((int) ($num) && ctype_digit($num)) {
$words = array();
$num = str_replace(array(',', ' '), '', trim($num));
$list1 = array(
'', 'one', 'two', 'three', 'four', 'five', 'six', 'seven',
'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen',
'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'
);
$list2 = array(
'', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty',
'seventy', 'eighty', 'ninety', 'hundred'
);
$list3 = array(
'', 'thousand', 'million', 'billion', 'trillion',
'quadrillion', 'quintillion', 'sextillion', 'septillion',
'octillion', 'nonillion', 'decillion', 'undecillion',
'duodecillion', 'tredecillion', 'quattuordecillion',
'quindecillion', 'sexdecillion', 'septendecillion',
'octodecillion', 'novemdecillion', 'vigintillion'
);
$num_length = strlen($num);
$levels = (int) (($num_length + 2) / 3);
$max_length = $levels * 3;
$num = substr('00' . $num, -$max_length);
$num_levels = str_split($num, 3);
foreach ($num_levels as $num_part) {
$levels--;
$hundreds = (int) ($num_part / 100);
$hundreds = ($hundreds ? ' ' . $list1[$hundreds] . ' Hundred' . ($hundreds == 1 ? '' : 's') . ' ' : '');
$tens = (int) ($num_part % 100);
$singles = '';
if ($tens < 20) {
$tens = ($tens ? ' ' . $list1[$tens] . ' ' : '');
} else {
$tens = (int) ($tens / 10);
$tens = ' ' . $list2[$tens] . ' ';
$singles = (int) ($num_part % 10);
$singles = ' ' . $list1[$singles] . ' ';
}
$words[] = $hundreds . $tens . $singles . (($levels && (int) ($num_part)) ? ' ' . $list3[$levels] . ' ' : '');
}
$commas = count($words);
if ($commas > 1) {
$commas = $commas - 1;
}
$words = implode(', ', $words);
$words = trim(str_replace(' ,', ',', ucwords($words)), ', ');
if ($commas) {
$words = str_replace(',', ' and', $words);
}
return $words;
} else if (!((int) $num)) {
return 'Zero';
}
return '';
}
}
Использование хелпера
Откройте файл DemoController.php и запишите в него этот код.
DemoController.php
<?php
namespace App\Controllers;
use App\Controllers\BaseController;
class DemoController extends BaseController
{
public function __construct()
{
helper("number"); // Load helper
}
public function index()
{
$word = numberToWord(120);
print($word);
echo "<br>";
$word = numberToWord(4500);
print($word);
echo "<br>";
$word = numberToWord(58010);
print($word);
}
}
В выводе мы получим
Four Thousand and Five Hundreds
Fifty Eight Thousand and Ten
Надеемся, что это руководство помогло вам очень подробно изучить Как преобразовать числа в слова в CodeIgniter 4
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.