-2

这样做的优雅方式是什么?

我有这个->“MC0001”这是输入。它总是以“MC”开头我用这个输入瞄准的输出是“MC0002”。

所以我创建了一个在删除“MC000”后应该返回“1”的函数。稍后我将把它转换成一个整数,这样我就可以生成“MC0002”,它可以上升到“MC9999”。为此,我想我需要遍历字符串并计算零等等,但我认为那样会弄得一团糟。

有人有更好的主意吗?

4

7 回答 7

2

这应该可以解决问题:

<?php
$string = 'MC0001';
// extract the part succeeding 'MC':
$number_part = substr($string, 2);
// count the digits for later:
$number_digits = strlen($number_part);
// turn it into a number:
$number = (int) $number_part;
// make the next sequence:
$next = 'MC' . str_pad($number + 1, $number_digits, '0', STR_PAD_LEFT);
于 2012-10-02T08:31:36.493 回答
0

只需使用 ltrim 删除任何前导字符:http ://php.net/manual/en/function.trim.php

$str = ltrim($str, 'MC0');
$num = intval($str);
于 2012-10-02T08:31:45.323 回答
0

使用 filter_var 可能是最好的解决方案。

echo filter_var("MC0001", FILTER_SANITIZE_NUMBER_INT)."\n";
echo filter_var("MC9999", FILTER_SANITIZE_NUMBER_INT);

会给你

0001
9999

这些可以转换为 int 或按原样使用,因为如果您将它们用作数字,PHP 无论如何都会自动转换。

于 2012-10-02T08:38:53.687 回答
-1
<php
// original number to integer
sscanf( $your_string, 'MC%d', $your_number );
// pad increment to string later on
sprintf( 'MC%04u', $your_number + 1 );
于 2012-10-02T09:41:57.240 回答
-2

不确定当有前导零时是否有更好的方法将字符串解析为整数。

我建议执行以下操作: 1. 遍历字符串(从位置 2 开始,因为您不需要 MC 部分) 2. 如果您发现一个大于 0 的数字,请停止,使用您当前的位置获取子字符串和字符串的长度减去您当前的位置。转换为整数,返回值。

于 2012-10-02T08:30:47.897 回答
-2

您可以通过对字符串执行子字符串操作来删除“MC”par 。

$a = "MC0001";
$a = substr($a, 2); //Lengths of "MC"
$number = intval($a); //1
于 2012-10-02T08:31:21.627 回答
-2
return intval(str_replace($input, 'MC', ''), 10);
于 2012-10-02T08:33:55.603 回答