2

尝试对某些哈希使用简单的“版本控制”系统,我执行以下操作:

$last_version = '009';
$increment = '001';

$result = $last_version + $increment;

var_dump($result);

我会期望:string(010)但是int(10)在我跳入if's and之前str-pad,我想知道是否还有其他方法可以保存所需的格式?

4

4 回答 4

3

Using+自动将变量转换为适当的number类型(在本例中为int,但可以将不同的字符串格式转换为float)。

如果要保留所需的 0 左填充,可以使用sprintf()来格式化结果,如下所示:

$result = sprintf('%03d', $last_version + $increment);

格式说明符%03d指定您想要d一个长度为3左填充字符的整数字符串 ( ) 0

更多关于 PHP 的 Type Juggling 逻辑的信息可以在PHP 文档中找到:Type Juggling

于 2013-02-18T18:01:33.253 回答
1
$last_version = '009';
$increment = '001';

$result = $last_version + $increment;

$result = (string) $result ;

var_dump($result) ;

当您尝试使用字符串执行数学运算时,它们会被转换为适当的类型。在这种情况下为 int。但是您可以在上面的示例中将整数转换回字符串。

于 2013-02-18T17:59:36.557 回答
1

您不能添加字符串(就这么简单)。这就是 PHP 将两个字符串隐式转换为整数的原因(这称为动态类型)。

要格式化您的号码,您可以执行以下操作:

$last_version = '009';
$increment    = '001';

$result = $last_version + $increment; // = 10
$result = sprintf("%03d", $result) // = "010"
于 2013-02-18T18:01:54.257 回答
1

当您使用 时+,PHP 会自动将字符串转换为整数,从而得到int(10您所看到的结果。您将无法以这种方式添加字符串。因此,最好的办法是将版本保持为整数和字符串填充,如下所示:

$last_version = 9;
$increment = 1; 
$pad_length = 3;
$pad_string = '0';

$result = $last_version + increment; // or simply $last_version++; if increment will always be 1

$string_result = str_pad((string)$result, $pad_length, $pad_string, STR_PAD_LEFT);
于 2013-02-18T18:04:05.333 回答