PHP:substrで文字列の一部を切り取って表示する際は、普通に0から数える。1番目は0となることに注意。※strlenの場合は文字数を返すため、0から数えず、単に1から数えることにも注意。

$mojiretsu = "0123456789";
$mojiretsu_next = "abcdefg";
// 超注意!! substrは「0」から数えない。「1」から数える。
// i番目の文字から j文字分、文字列を返す。
// よって、例えば 2番目であれば、ひとつ目の文字は「0」となり、0番目がひとつめの文字となる。
// よって、第二パラメーターが2ならば、「0、1、2」で2番目となるが、実際には三文字目、ということになる。
// 第三パラメーターは数字そのままの解釈でOK。4ならば四文字分を切り取る(抽出する)。
echo substr($mojiretsu, 2, 4) . PHP_EOL; // 2345
echo substr($mojiretsu, 3, 3) . PHP_EOL; // 345
echo substr($mojiretsu,7,strlen($mojiretsu)-7) . PHP_EOL; // 789
// ↑ 0番目から数えて7番目の文字が開始位置で、何文字分か?はstrlenで文字の数を出し、
// strlenは0番目ではなく1番目から単純に文字数を数えて返すため、この場合は文字数は「10文字」。
// そして、この10文字から開始位置の「7」を引算すれば「3」。
// 3文字分を切り取ると、ちょうど全文字列の最後まで切り取れることになる。

// また、異なる書き方もあった。学習を進めると、「strlen($mojiretsu)-7」とせず、「strlen($mojiretsu)」とだけしか書いていないものもあった。
// この場合は残り3文字しかないのに、10文字分切り取る指示を出す。3文字分で文字列は終わってしまい、
// 4文字目以降は切り取るものがないので、単に3文字分だけが表示される、ということらしい。乱暴な印象。
echo substr($mojiretsu,7,strlen($mojiretsu)) . PHP_EOL; // 789

// あとは、文字列から二種類の切り取り方をして、それぞれを結合させるやり方とか。
echo substr($mojiretsu,2,5) . substr($mojiretsu_next,3,2) . PHP_EOL; // 23456de
目次
閉じる