Увеличение строки на единицу в PHP

Я изо всех сил пытаюсь найти способ увеличить требуемый конкретный шаблон. Каждому новому члену дается уникальный идентификатор, например ABC000001. Каждый новый идентификатор участника должен увеличиваться на единицу. Таким образом, идентификатор второго участника будет ABC000002. Я использую PHP и MySQL для отслеживания каждого члена, но мне не удалось найти способ правильного увеличения с использованием строкового формата, указанного выше.

Как лучше всего подойти к этому?

Не увеличивайте строку. Увеличьте целое число, а затем префикс строки.

Alex Howansky 10.04.2018 17:37

PHP может увеличивать вашу строку: 3v4l.org/l3OGS Вы, вероятно, пожалеете позже, когда получите несколько записей в базе данных с одинаковым идентификатором: D

axiac 10.04.2018 17:39

определите столбец автоинкремента и prefixID, затем объедините их

âńōŋŷXmoůŜ 10.04.2018 17:39

@AlexHowansky Хорошо, я понимаю это. Но как мне сохранить правильное количество нулей в начале, когда число станет больше? Например, ABC002345?

three3 10.04.2018 17:45

str_pad может заполнять нули. Есть ли причина, по которой вы должны сделать это так? Если вы пытаетесь создать уникальную строку, не похожую на int, для каждого члена, вы можете сделать это по-другому с помощью системы guid.

IncredibleHat 10.04.2018 17:46

@IncredibleHat Да, у нас есть новое партнерство, требующее именно этого формата.

three3 10.04.2018 17:46

Используйте sprintf() или str_pad().

axiac 10.04.2018 17:46

@ three3 ... ох, это совершенно понятно ... Я ненавижу иметь дело с третьими сторонами именно по этой причине;)

IncredibleHat 10.04.2018 17:47
$id = sprintf('%s%06d', $prefix, $num);
Alex Howansky 10.04.2018 17:48

@IncredibleHat То же самое, я не знаю, кто это придумывает, лол. Не уверен, почему они не могут придерживаться обычных соглашений.

three3 10.04.2018 17:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
10
1 109
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Как упоминает @axiac, это, вероятно, не очень хорошая идея, но с ней довольно легко справиться.

$memberid = 'ABC000001';
list($mem_prefix,$mem_num) = sscanf($memberid,"%[A-Za-z]%[0-9]");
echo $mem_prefix . str_pad($mem_num + 1,6,'0',STR_PAD_LEFT);

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

Вы можете извлекать только цифры, используя регулярное выражение для увеличения и используя str_pad для создания префикса:

$memberid = 'ABC000001';
$num = preg_replace('/\D/', '',$memberid);
echo sprintf('ABC%s', str_pad($num + 1, "6", "0", STR_PAD_LEFT));

Возможный ответ без регулярного выражения. Проходит по каждому символу и проверяет, является ли он числом. Затем использует sprintf (), чтобы убедиться, что ведущие нули все еще там.

$str = "ABC000001";
$number = "";
$prefix = "";
$strArray = str_split($str);
foreach ($strArray as $char) {  
    if (is_numeric($char))  {
        $number .= $char;   
    } else {
        $prefix .= $char;   
    }
}
$length = strlen($number);

$number = sprintf('%0' . $length . 'd', $number + 1);
echo $prefix . $number;

Это работает для этого экземпляра, но не будет работать, если в префиксе есть числа.

Другие вопросы по теме