@lunsy

Как в php разбить 12ти-значное число на определенные блоки?

У меня есть 12ти-значное число которое состоит из : первые 3 числа означают код учреждение, т.е. в основном число статичное + 3 числа (т.е. следующие 3 числа) означает код сотрудника, тоже почти статичное + 2 числа уникальное число (самое изменчивое), т.е. число которое на 1 единицу становится больше предыдущей записи и она же может писаться как 01, 02 и тд, + 4 числа (последние, тоже иногда меняются) текущий год, и год формируется если месяц в диапазоне (7-12) то прибавляем один (+1), если же (1-6) месяца то год остается таким же каким был.
По собрать их из php я могу. Ну вот наоборот, т.е. получит 12ти значное целое число из БД в php и разделить, то ума не приложу как его разбить на эти блоки.
Вопрос: Есть ли функция в php или подскажите код который может это сделать?
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
l3ftoverz
@l3ftoverz Куратор тега PHP
Люблю Финский металкор и ищу работу.
<?php

function getSegments ($code) {
    
    return [
        'institution_code' => substr($code, 0, 3),
        'employee_code'    => substr($code, 3, 3),
        'unique_code'      => substr($code, 6, 2),
        'last_code'        => substr($code, 8)
    ];
    
};

$segments = getSegments(111222334444);

var_dump($segments);


Выдаст:
array(4) {
  ["institution_code"]=>
  string(3) "111"
  ["employee_code"]=>
  string(3) "222"
  ["unique_code"]=>
  string(2) "33"
  ["last_code"]=>
  string(4) "4444"
}


Про последний сегмент я правда до конца не понял.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
sergiks
@sergiks Куратор тега PHP
♬♬
Есть специально для этого в PHP функция sscanf() – разбирает строку по формату.

$str = "111222772019"; // строка из БД

list($unit, $employee, $serial, $year) = sscanf($str, "%3d%3d%2d%4d");
// 3 цифры, 3 цифры, 2 цифры, 4 цифры

printf("Unit: %d, man: %d, id: %d, year: %d<br/>", $unit, $employee, $serial, $year);
// Unit: 111, man: 222, id: 77, year: 2019
Ответ написан
uDenX
@uDenX
PHP Developer
Регулярка?

Что то типа того: (?'test'\d{3})(?'test_2'\d{3})
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы