Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@m_norii

substr() で length指定するとき、元の文字列長チェックは不要

More than 1 year has passed since last update.

こんなコードを見かけた。

define('STR_LENGTH_MAX', 255);
$str = getSomeLongString(); //何か長いかもしれない文字列を返す関数
if (strlen($str) > STR_LENGTH_MAX){
    $str = substr($str, 0, STR_LENGTH_MAX);
}

実装した人はおそらく素朴に「規定の文字列長以上だったら切り詰める」を実装したのだろう。

もちろんこれでも動くが、そもそもこんなことしなくても

substr() の第3引数で指定した文字列長より、第1引数で渡した文字列が短い場合

substr() は元の文字列をそのまま帰すので、この実装は単純に

define('STR_LENGTH_MAX', 255);
$str = substr(getSomeLongString(), 0, STR_LENGTH_MAX);

でOK。

念のため、実証コードを掲載。

$ cat test.php
<?php
error_reporting(E_ALL);

$str = 'abcdefghijklmn';
for ($i = 1;$i<20;$i++){
    echo substr($str,0,$i), PHP_EOL;
}

$ php test.php 
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
abcdefghijkl
abcdefghijklm
abcdefghijklmn
abcdefghijklmn
abcdefghijklmn
abcdefghijklmn
abcdefghijklmn
abcdefghijklmn

$str の文字列の長さより、substr() の第3引数のほうが大きい場合
$str そのものが返却されていることがわかる。
エラーも特におきない。

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
m_norii
最近触っているのは、 AWS, PHP, Laravel, MySQL, BigQuery 最近は Zenn の方に記事を書いているので、こちらもよろしくです。 https://zenn.dev/m_norii
openlogi
物流はこれから、テクノロジーによりダイナミックに変化する業界です。物を作る人とそれを欲しい人、その間の物流や配送がすべてネットワーク化された、需要と供給が最適化される次世代のインフラづくりを私たちは目指しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?