文字列操作色々

文字列操作について、毎回Manual確認しているのでめも。

# 文字列の検索

|関数名|機能|引数|返り値|大文字小文字の区別|
|:------|:--|:---|:------|:-:|
|strpos|該当文字列が最初に出現する位置を返す|(検索文字列,検索文字,[開始位置])|数値 or FALSE|○|
|stripos|該当文字列が最初に出現する位置を返す|(検索文字列,検索文字,[開始位置])|数値 or FALSE|×|
|strrpos|該当文字列が最後に出現する位置を返す|(検索文字列,検索文字,[開始位置])|数値 or FALSE|○|
|strripos|該当文字列が最後に出現する位置を返す|(検索文字列,検索文字,[開始位置])|数値 or FALSE|×|
|strstr|該当文字列より後ろの文字列を返す|(検索文字列,検索文字,[前部分を返すかどうか])|文字列 or FALSE|○|
|stristr|該当文字列より後ろの文字列を返す|(検索文字列,検索文字,[前部分を返すかどうか])|文字列 or FALSE|×|

#### 実際の動き
```php:strpos
$foo = "ABCabcABCabcDEF";

var_dump(strpos($foo, 'a'));    //int(3)
var_dump(strpos($foo, 'a', 5)); //int(9)
var_dump(strpos($foo, 'a', -1));//PHP Warning:  strpos(): Offset not contained in string
var_dump(strpos($foo, 'A'));    //int(0)
var_dump(strpos($foo, 'A', 5)); //int(6)
var_dump(strpos($foo, 'D'));    //int(12)
var_dump(strpos($foo, 'd'));    //bool(false)
```
```php:srtipos
$foo = "ABCabcABCabcDEF";

var_dump(stripos($foo, 'a'));    //int(0)
var_dump(stripos($foo, 'a', 5)); //int(6)
var_dump(stripos($foo, 'a', -1));//PHP Warning:  stripos(): Offset not contained in string
var_dump(stripos($foo, 'A'));    //int(0)
var_dump(stripos($foo, 'A', 5)); //int(6)
var_dump(stripos($foo, 'D'));    //int(12)
var_dump(stripos($foo, 'd'));    //int(12)
```
```php:strrpos
$foo = "ABCabcABCabcDEF";

var_dump(strrpos($foo, 'a'));    //int(9)
var_dump(strrpos($foo, 'a', 8)); //int(9)
var_dump(strrpos($foo, 'a', -7));//int(3)
var_dump(strrpos($foo, 'A'));    //int(6)
var_dump(strrpos($foo, 'A', 8)); //bool(false)
var_dump(strrpos($foo, 'D'));    //int(12)
var_dump(strrpos($foo, 'd'));    //bool(false)
```
```php:strripos
$foo = "ABCabcABCabcDEF";

var_dump(strripos($foo, 'a'));    //int(9)
var_dump(strripos($foo, 'a', 8)); //int(9)
var_dump(strripos($foo, 'a', -7));//int(6)
var_dump(strripos($foo, 'A'));    //int(9)
var_dump(strripos($foo, 'A', 8)); //int(9)
var_dump(strripos($foo, 'D'));    //int(12)
var_dump(strripos($foo, 'd'));    //int(12)
```
```php:strstr
$foo = "ABCabcABCabcDEF";

var_dump(strstr($foo, 'a'));       //string(12) "abcABCabcDEF"
var_dump(strstr($foo, 'a', true)); //string(3) "ABC"
var_dump(strstr($foo, 'a', false));//string(12) "abcABCabcDEF"
var_dump(strstr($foo, 'A'));       //string(15) "ABCabcABCabcDEF"
var_dump(strstr($foo, 'A', true)); //string(0) ""
var_dump(strstr($foo, 'A', false));//string(15) "ABCabcABCabcDEF"
var_dump(strstr($foo, 'D'));       //string(3) "DEF"
var_dump(strstr($foo, 'd'));       //bool(false)
```
```php:stristr
$foo = "ABCabcABCabcDEF";

var_dump(stristr($foo, 'a'));       //string(15) "ABCabcABCabcDEF"
var_dump(stristr($foo, 'a', true)); //string(0) ""
var_dump(stristr($foo, 'a', false));//string(15) "ABCabcABCabcDEF"
var_dump(stristr($foo, 'A'));       //string(15) "ABCabcABCabcDEF"
var_dump(stristr($foo, 'A', true)); //string(0) ""
var_dump(stristr($foo, 'A', false));//string(15) "ABCabcABCabcDEF"
var_dump(stristr($foo, 'D'));       //string(3) "DEF"
var_dump(stristr($foo, 'd'));       //string(3) "DEF"
```

# 文字列の切抜き


|関数名|機能|引数|返り値|
|:----|:---|:---|:---|
|substr[^1]|指定された位置から指定の長さの文字列を返す|(検索文字列,開始位置,[文字列の長さ])|文字列 or FALSE|


#### 実際の動き
```php:substr
$foo = "ABCabcABCabcDEF";

var_dump(substr($foo, 7));     //string(8) "BCabcDEF"
var_dump(substr($foo, 7, 3));  //string(3) "BCa"
var_dump(substr($foo, 30));    //bool(false)
var_dump(substr($foo, -7));    //string(7) "CabcDEF"
var_dump(substr($foo, -7, 3)); //string(3) "Cab"
var_dump(substr($foo, -7, -3));//string(4) "Cabc"

//1文字だけを取り出すときは直接その位置を指定することもできる
var_dump($foo[5]); //string(1) "c"
```

[^1]: [文字列への文字単位のアクセスと修正](http://php.net/manual/ja/language.types.string.php#language.types.string.substr)