いくつかのハッシュに単純な「バージョン管理」システムを使用しようとすると、次のようになります。
$last_version = '009';
$increment = '001';
$result = $last_version + $increment;
var_dump($result);
私は期待します:string(010)しかし、私は'sとint(10)に飛び込む前に、希望のフォーマットを保存する他の方法があるかどうか疑問に思っていましたか?ifstr-pad
を使用+すると、変数が適切なnumberタイプに自動的にキャストされます(この場合、int。ただし、さまざまな文字列形式をキャストできますfloat)。
目的の0の左パディングを維持したい場合は、次sprintf()のように結果をフォーマットするために使用できます。
$result = sprintf('%03d', $last_version + $increment);
フォーマット指定子は、長さが左に文字で埋められ%03dた整数文字列()が必要であることを指定します。d30
PHPの型ジャグリングロジックの詳細については、PHPドキュメント:型ジャグリングを参照してください。
文字列を追加することはできません(それはそれと同じくらい簡単です)。これが、PHPが両方の文字列を暗黙的に整数に変換する理由です(これは動的型付けと呼ばれます)。
番号をフォーマットするには、次のようにします。
$last_version = '009';
$increment = '001';
$result = $last_version + $increment; // = 10
$result = sprintf("%03d", $result) // = "010"
$last_version = '009';
$increment = '001';
$result = $last_version + $increment;
$result = (string) $result ;
var_dump($result) ;
文字列で数学演算を実行しようとすると、適切な型にキャストされます。この場合は int. ただし、上記の例では、整数を文字列にキャストできます。
を使用する+と、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);