Я изо всех сил пытаюсь найти способ увеличить требуемый конкретный шаблон. Каждому новому члену дается уникальный идентификатор, например ABC000001. Каждый новый идентификатор участника должен увеличиваться на единицу. Таким образом, идентификатор второго участника будет ABC000002. Я использую PHP и MySQL для отслеживания каждого члена, но мне не удалось найти способ правильного увеличения с использованием строкового формата, указанного выше.
Как лучше всего подойти к этому?
PHP может увеличивать вашу строку: 3v4l.org/l3OGS Вы, вероятно, пожалеете позже, когда получите несколько записей в базе данных с одинаковым идентификатором: D
определите столбец автоинкремента и prefixID, затем объедините их
@AlexHowansky Хорошо, я понимаю это. Но как мне сохранить правильное количество нулей в начале, когда число станет больше? Например, ABC002345?
str_pad может заполнять нули. Есть ли причина, по которой вы должны сделать это так? Если вы пытаетесь создать уникальную строку, не похожую на int, для каждого члена, вы можете сделать это по-другому с помощью системы guid.
@IncredibleHat Да, у нас есть новое партнерство, требующее именно этого формата.
@ three3 ... ох, это совершенно понятно ... Я ненавижу иметь дело с третьими сторонами именно по этой причине;)
$id = sprintf('%s%06d', $prefix, $num);@IncredibleHat То же самое, я не знаю, кто это придумывает, лол. Не уверен, почему они не могут придерживаться обычных соглашений.






Как упоминает @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;
Это работает для этого экземпляра, но не будет работать, если в префиксе есть числа.
Не увеличивайте строку. Увеличьте целое число, а затем префикс строки.