尝试对某些哈希使用简单的“版本控制”系统,我执行以下操作:
$last_version = '009';
$increment = '001';
$result = $last_version + $increment;
var_dump($result);
我会期望:string(010)
但是int(10)
在我跳入if
's and之前str-pad
,我想知道是否还有其他方法可以保存所需的格式?
Using+
自动将变量转换为适当的number
类型(在本例中为int
,但可以将不同的字符串格式转换为float
)。
如果要保留所需的 0 左填充,可以使用sprintf()
来格式化结果,如下所示:
$result = sprintf('%03d', $last_version + $increment);
格式说明符%03d
指定您想要d
一个长度为3
左填充字符的整数字符串 ( ) 0
。
更多关于 PHP 的 Type Juggling 逻辑的信息可以在PHP 文档中找到:Type Juggling
$last_version = '009';
$increment = '001';
$result = $last_version + $increment;
$result = (string) $result ;
var_dump($result) ;
当您尝试使用字符串执行数学运算时,它们会被转换为适当的类型。在这种情况下为 int。但是您可以在上面的示例中将整数转换回字符串。
您不能添加字符串(就这么简单)。这就是 PHP 将两个字符串隐式转换为整数的原因(这称为动态类型)。
要格式化您的号码,您可以执行以下操作:
$last_version = '009';
$increment = '001';
$result = $last_version + $increment; // = 10
$result = sprintf("%03d", $result) // = "010"
当您使用 时+
,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);