Я изо всех сил пытаюсь найти способ увеличить требуемый шаблон. Каждому новому члену присваивается уникальный идентификатор, такой как ABC000001. Каждый новый идентификатор участников должен увеличиваться на единицу. Таким образом, вторым идентификатором участника будет ABC000002. Я использую PHP и MySQL для отслеживания каждого члена, но я не смог придумать способ правильного наращивания с использованием строкового формата выше.
Каков наилучший способ приблизиться к этому?
Как @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(), чтобы убедиться, что ведущие 0s все еще существуют.
$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;
Это работает для этого экземпляра, но не будет работать, если в префиксе есть номера.