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