これを行うためのエレガントな方法は何でしょうか?
私はこれを持っています->「MC0001」これは入力です。常に「MC」で始まりますこの入力で狙う出力は「MC0002」です。
そこで、「MC000」を削除した後に「1」を返す関数を作成しました。後でこれを整数に変換して、「MC9999」まで上がる可能性のある「MC0002」を生成できるようにします。そのためには、文字列をループしてゼロなどを数える必要があると思いましたが、そのように混乱させていると思います。
誰かもっと良いアイデアがありますか?
これでうまくいくはずです:
<?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);
filter_var を使用するのが最善の解決策かもしれません。
echo filter_var("MC0001", FILTER_SANITIZE_NUMBER_INT)."\n";
echo filter_var("MC9999", FILTER_SANITIZE_NUMBER_INT);
あなたにあげます
0001
9999
これらは int にキャストすることも、そのまま使用することもできます。これは、数値として使用すると PHP が自動変換するためです。
ltrim を使用して先頭の文字を削除するだけです: http://php.net/manual/en/function.trim.php
$str = ltrim($str, 'MC0');
$num = intval($str);
先行ゼロがある場合に文字列を整数として解析するより良い方法があるかどうかはわかりません。
次のことをお勧めします: 1. 文字列をループします (MC 部分は必要ないため、位置 2 から開始します) 2. 0 より大きい数値を見つけたら停止し、現在の位置を使用して部分文字列を取得します文字列の長さから現在の場所を引いたものです。整数にキャストし、値を返します。
文字列に対して部分文字列操作を行うことで、「MC」パーを削除できます。
$a = "MC0001";
$a = substr($a, 2); //Lengths of "MC"
$number = intval($a); //1
return intval(str_replace($input, 'MC', ''), 10);