Symfoware

Symfowareについての考察blog

PHP 文字列操作関数まとめ (文字数のカウント、分割、結合等)

PHPの文字列操作、いつも忘れるのでまとめてメモしておきます。

参考にしたのはこちら。
String 関数


・文字列の長さ - strlen
・指定文字で分割 - explode
・指定文字でarrayを結合 - implode<
・文字列前後の空白除去 - trimH
・指定文字の出現箇所 - strpos
・指定文字の出現箇所を後方から検索 - strrpos
・文字列の一部を取得 - substr
・文字列を小文字にする - strtolower
・文字列を大文字にする - strtoupper
・文字列を置換する - str_replace
・文字列を固定長の他の文字列で埋める - str_pad
・文字列を指定回数繰り返す - str_repeat
・URLを構成要素毎に分割 - parse_url
・URLのクエリー部分を連想配列に変換 - parse_str


文字列の長さ - strlen




  1. $s = 'abc';
  2. echo strlen($s); // 3






指定文字で分割 - explode



他の言語だと「split」とかで定義されている機能。


  1. $s = 'a,bcd,ef';
  2. $ary = explode(',', $s);
  3. echo var_export($ary);




array (
0 => 'a',
1 => 'bcd',
2 => 'ef',
)







指定文字でarrayを結合 - implode



他の言語だと「join」とかで定義されている機能。
PHPでもjoinがimplodeのエイリアスとして定義されているのでjoinでもOK。


  1. $ary = array('a', 'bcd', 'ef');
  2. $s = implode(',', $ary);
  3. echo $s; // a,bcd,ef







文字列前後の空白除去 - trim



先頭部分(左側)のみ除去 - ltrim
後方部分(右側)のみ除去 - rtrim


  1. $s = " abc \r\n ";
  2. echo trim($s); // abc




第二引数で除外したい文字を指定可能。
「..」で文字の範囲指定が行える。


  1. $s = "ABCabcABC";
  2. echo trim($s); // ABCabcABC
  3. echo trim($s, 'ABC'); // abc
  4. echo trim($s, 'A..C'); // abc







指定文字の出現箇所 - strpos



他の言語だと「index」や「find」とかで定義されている機能。
大文字、小文字を区別せず調べたいときは、striposを使用する。

第三引数で、検索を開始する位置を指定できる。


  1. $s = "abcdeabcde";
  2. var_export( strpos($s, 'cd') ); // 2
  3. echo PHP_EOL;
  4. // 存在しない文字
  5. var_export( strpos($s, 'f')); // false
  6. echo PHP_EOL;
  7. // 検索開始位置を指定
  8. var_export( strpos($s, 'cd', 3)); // 7
  9. echo PHP_EOL;







指定文字の出現箇所を後方から検索 - strrpos



他の言語だと「rindex」や「rfind」とかで定義されている機能。
大文字、小文字を区別せず調べたいときは、strriposを使用する。

使い方はstrposと同様。


  1. $s = "abcdeabcde";
  2. var_export( strrpos($s, 'cd') ); // 7
  3. echo PHP_EOL;
  4. // 存在しない文字
  5. var_export( strrpos($s, 'f')); // false
  6. echo PHP_EOL;
  7. // 検索開始位置を指定
  8. var_export( strrpos($s, 'cd', -5)); // 2
  9. echo PHP_EOL;







文字列の一部を取得 - substr




  1. //--012345
  2. $s="abcdef";
  3. var_export( substr($s, 2) ); // cdef
  4. echo PHP_EOL;
  5. var_export( substr($s, -3)); // def
  6. echo PHP_EOL;
  7. // 切り出す文字数を第三引数で指定
  8. var_export( substr($s, 3, 2)); // df
  9. echo PHP_EOL;
  10. // 存在しない領域を指定
  11. var_export( substr($s, 100)); // (bool)false
  12. echo PHP_EOL;







文字列を小文字にする - strtolower




  1. $s="ABC日本語";
  2. var_export( strtolower($s) ); // abc日本語
  3. echo PHP_EOL;







文字列を大文字にする - strtoupper




  1. $s="abc日本語";
  2. var_export( strtoupper($s) ); // ABC日本語
  3. echo PHP_EOL;







文字列を置換する - str_replace



大文字、小文字を区別しない場合は、str_ireplaceを使用。


  1. $s = "abc-abc-abc";
  2. var_export( str_replace('abc', 'TEST', $s) ); // TEST-TEST-TEST
  3. echo PHP_EOL;
  4. // 置換対象を配列で指定
  5. $targets = array('a', 'c');
  6. var_export( str_replace($targets, 'T', $s) ); // TbT-TbT-TbT
  7. echo PHP_EOL;
  8. // 変換後対象を配列で指定
  9. $targets = array('a', 'c');
  10. $replaces = array('A', 'C');
  11. var_export( str_replace($targets, $replaces, $s) ); // AbC-AbC-AbC
  12. echo PHP_EOL;
  13. // 変換した数を取得
  14. str_replace('abc', 'TEST', $s, $count);
  15. var_export($count); // 3
  16. echo PHP_EOL;







文字列を固定長の他の文字列で埋める - str_pad



文字列のpaddingです。
第三引数でpaddingに使用する文字列。
第四引数で、前後または両方にpaddingするかの定数を指定。


  1. $s = "abc";
  2. var_export( str_pad('abc', 10) ); // 'abc     '
  3. echo PHP_EOL;
  4. var_export( str_pad('abc', 10, "-=", STR_PAD_LEFT) ); // '-=-=-=-abc'
  5. echo PHP_EOL;
  6. var_export( str_pad('abc', 10, "_", STR_PAD_BOTH) ); // '___abc____'
  7. echo PHP_EOL;
  8. var_export( str_pad('abc', 2, "*", STR_PAD_BOTH) ); // 'abc'
  9. echo PHP_EOL;








文字列を指定回数繰り返す - str_repeat



特定の文字を指定回数分繰り返した文字列を返します。
言語によっては「's' * 10」みたいに、乗算で得られる場合もあります。

クレジットカード番号の末尾4桁だけ表示して、残りは「*」で
みたいなときに使えるかなと思いましたが、その場合はstr_padの方が楽そうです。


  1. $s = "0123";
  2. var_export( str_repeat('*', 10) ); // '**********'
  3. echo PHP_EOL;
  4. var_export( str_repeat('*', 10 - strlen($s)) .$s ); // '******0123'
  5. echo PHP_EOL;
  6. // こっちのほうが楽かも
  7. var_export( str_pad($s, 10, '*', STR_PAD_LEFT)); // '******0123'
  8. echo PHP_EOL;






URLを構成要素毎に分割 - parse_url



自前でURLを解析するときに便利そう。


  1. $url = 'http://username:password@hostname:9090/path?arg=value#anchor';
  2. // 解析結果を連想配列で取得
  3. var_export(parse_url($url));
  4. echo PHP_EOL;
  5. // 欲しい項目を個別に取得
  6. var_export(parse_url($url, PHP_URL_SCHEME));
  7. echo PHP_EOL;
  8. var_export(parse_url($url, PHP_URL_USER));
  9. echo PHP_EOL;
  10. var_export(parse_url($url, PHP_URL_PASS));
  11. echo PHP_EOL;
  12. var_export(parse_url($url, PHP_URL_HOST));
  13. echo PHP_EOL;
  14. var_export(parse_url($url, PHP_URL_PORT));
  15. echo PHP_EOL;
  16. var_export(parse_url($url, PHP_URL_PATH));
  17. echo PHP_EOL;
  18. var_export(parse_url($url, PHP_URL_QUERY));
  19. echo PHP_EOL;
  20. var_export(parse_url($url, PHP_URL_FRAGMENT));
  21. echo PHP_EOL;




array (
'scheme' => 'http',
'host' => 'hostname',
'port' => 9090,
'user' => 'username',
'pass' => 'password',
'path' => '/path',
'query' => 'arg=value',
'fragment' => 'anchor',
)
'http'
'username'
'password'
'hostname'
9090
'/path'
'arg=value'
'anchor'




指定した要素が存在しない場合はNULLになります。


  1. $url = 'http://username:password@hostname:9090/path';
  2. // 存在しない要素を取得
  3. var_export(parse_url($url, PHP_URL_QUERY)); // NULL
  4. echo PHP_EOL;
  5. var_export(parse_url($url, PHP_URL_FRAGMENT)); // NULL
  6. echo PHP_EOL;







URLのクエリー部分を連想配列に変換 - parse_str



URLクエリー「?p1=value1&p2=value2」の部分を連想配列に変換。
parse_urlで取得したPHP_URL_QUERYの部分を解析するのに使えそうです。


  1. $s = 'p1=value1&p2=value2';
  2. // $outputに解析結果を入れる
  3. parse_str($s, $output);
  4. var_export($output);
  5. echo PHP_EOL;




array (
'p1' => 'value1',
'p2' => 'value2',
)




parse_urlと組み合わせる例。


  1. $url = 'http://username:password@hostname:9090/path?arg=value&p1=value1&p2=value2';
  2. // URLのクエリー部分を取得
  3. $query = parse_url($url, PHP_URL_QUERY);
  4. // $outputに解析結果を入れる
  5. parse_str($query, $output);
  6. var_export($output);
  7. echo PHP_EOL;




array (
'arg' => 'value',
'p1' => 'value1',
'p2' => 'value2',
)





関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/10/25(日) 16:40:49|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Python バイナリデータにしたjpgのexif情報を取得する(PIL使用) | ホーム | PHP assertで関数のテスト、assert_optionsでテストを無効にする>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1814-b4756425
この記事にトラックバックする(FC2ブログユーザー)