【情報整理④】PHPの頻出関数を整理して、画面遷移過多による眼病を予防 ~ 文字列・数値編 ~

- Netflixによって世界中から人気を博している「こんまり」さんに、多大な影響を受けて情報整理をしていく記事第四弾。
- 本来の「世界的潮流に乗っかって、几帳面技術者を堂々宣伝する」という見掛け倒し目的のこの記事が、「角膜損傷を防ぐための健康活動」という老化防止目的の記事へと大幅転換を図る、二十代前半執筆者。
- 忘却癖が只者ではない私は、「検索・記録・復習」をしても、見事に消滅する滑稽な頭脳のため、常に画面は自分と見事に比例した「不安定な落ち着きの無さ」を発揮。
- 今回は、PHPの頻出関数の「文字列・数値」を整理していくことにしよう。

## PHP頻出関数

<!-- TOC -->

- [PHP頻出関数](#php頻出関数)
    - [文字列,数値](#文字列数値)
        - [printf(), sprintf()](#printf-sprintf)
        - [preg_match(),preg_match_all()](#preg_matchpreg_match_all)
        - [preg_replace()](#preg_replace)
        - [preg_quote()](#preg_quote)
        - [str_replace(), strtr()](#str_replace-strtr)
        - [substr(), mb_substr()](#substr-mb_substr)
        - [strtolower(), strtoupper()](#strtolower-strtoupper)
        - [strlen(), mb_strlen()](#strlen-mb_strlen)
        - [strpos(), mb_strpos()](#strpos-mb_strpos)
        - [mb_convert_encoding()](#mb_convert_encoding)
        - [mb_convert_kana()](#mb_convert_kana)
        - [trim(), ltrim(), rtrim()](#trim-ltrim-rtrim)
        - [mt_rand()](#mt_rand)
        - [is_string()](#is_string)
        - [is_int()](#is_int)
        - [is_float()](#is_float)
        - [is_numeric()](#is_numeric)
        - [round()](#round)
        - [floor()](#floor)
        - [ceil()](#ceil)
- [まとめ](#まとめ)
- [参考](#参考)

<!-- /TOC -->

### 文字列,数値

#### printf(), sprintf()

- 文字列をフォーマット指定で出力

- printf()は配列として出力を行う。

- sprintf() は結果を文字列として返す。

- [公式マニュアル](http://php.net/manual/ja/function.printf.php)

- [公式マニュアル](http://php.net/manual/ja/function.sprintf.php)

```php
<?php
// printf(フォーマット文字列,値,値);

printf('今日は%d月%d日です。',date('m'),date('d'));

// 実行結果
// 今日は3月2日です。
```

```php
<?php
// sprintf(フォーマット文字列,値,値);

$number = sprintf('%04d',30);
echo $number;

// 実行結果
// 0030
```

#### preg_match(),preg_match_all()

- 正規表現による一致・検索。

- パターンに一致すれば「1」、一致しなければ「2」を返す。

- preg_match_all() は一致したすべての値を変数に格納。

- [公式マニュアル](http://php.net/manual/ja/function.preg-match.php)

- [公式マニュアル](http://php.net/manual/ja/function.preg-match-all.php)

```php
<?php
// 返り値 = preg_match(/正規表現パターン/,検索対象の文字列,[配列],[動作フラグ],[検索開始位置])

  if (preg_match('/経済/', '世界経済情勢')) {
    echo 'ある';
  } else {
    echo 'ない';
  }

// 実行結果
// ある
```

```php
<?php
// 「PREG_OFFSET_CAPTURE」を指定して、一致文字列の登場位置（オフセット）をバイト数で取得
// ※半角は1バイト、全角は2バイト

  if (preg_match('/経済/', '世界経済情勢',$data,PREG_OFFSET_CAPTURE)) {
    echo "ある\n";
  } else {
    echo "ない";
  }
  print_r($data)

// 実行結果

/*
ある
Array
(
    [0] => Array
        (
            [0] => 経済
            [1] => 6
        )

)
*/

```

```php
<?php
// 「PREG_OFFSET_CAPTURE」を指定して、一致文字列の登場位置（オフセット）をバイト数で取得

  if (preg_match_all('/経済/', '世界経済情勢における、日本の経済状況を、日本経済大学教授の経済学者が解説。',$data,PREG_OFFSET_CAPTURE)) {
    echo 'ある';
  } else {
    echo 'ない';
  }
  print_r($data)

// 実行結果

/*
ある
Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => 経済
                    [1] => 6
                )

            [1] => Array
                (
                    [0] => 経済
                    [1] => 42
                )

            [2] => Array
                (
                    [0] => 経済
                    [1] => 66
                )

            [3] => Array
                (
                    [0] => 経済
                    [1] => 87
                )

        )

)
*/
```

#### preg_replace()

- 正規表現によるパターンに一致した、検索または置換を行う。

- [公式マニュアル](http://php.net/manual/ja/function.preg-replace.php)

```php
// preg_replace(正規表現パターン ,置換後文字列 ,置換対象文字列)

$names = '佐藤 田中 鈴木 佐藤';
$names_grep = preg_replace('/(佐藤)/', '上野', $names);
echo $names_grep;

// 実行結果

// 上野 田中 鈴木 上野
```

#### preg_quote()

- 正規表現特殊文字の前にバックスラッシュをつけてエスケープする。

- オプション区切り文字は省略可能。「/」が一般的に使用されている。

- [公式マニュアル](http://php.net/manual/ja/function.preg-quote.php)

```php
// preg_quote(文字列,オプション区切り文字)

$keywords = '$URL : /で始まる。';
$keywords = preg_quote($keywords, '/');
echo $keywords;

// 実行結果

// \$URL \: \/で始まる。
```

#### str_replace(), strtr()

- 文字列の置換。

- strtr() は複数の文字列のペアを渡して同時に置換できる。

- 第四引数の「置換した回数」は省略可能。

- [公式マニュアル](http://php.net/manual/ja/function.str-replace.php)

- [公式マニュアル](http://php.net/manual/ja/function.strtr.php)

```php 	
// str_replace(検索文字列 ,置換後文字列 ,検索対象文字列,置換した回数)

$names = ['佐藤', '高橋', '鈴木', '高橋', '中村'];
$replace = str_replace('高橋', '小松', $names, $count);
print_r($replace);
echo '置換した回数: '.$count;

// 実行結果

/*
Array
(
    [0] => 佐藤
    [1] => 小松
    [2] => 鈴木
    [3] => 小松
    [4] => 中村
)
置換回数: 2
*/
```

```php
// strtr(置換対象文字列, 文字列(配列))

$array = array("佐藤"=>"鈴木","田中"=>"田丸","高橋"=>"高峰");
print strtr("佐藤 田中 大川 大橋 高橋", $array);

// 実行結果

// 鈴木 田丸 大川 大橋 高峰
```

#### substr(), mb_substr()

- 文字列を切り出す。指定文字によって、何番目から何番目までを指定可能。

- [公式マニュアル](http://php.net/manual/ja/function.substr.php)

- [公式マニュアル](http://php.net/manual/ja/function.mb-substr.php)

```php
// substr (文字列, 開始位置 ) 

echo substr('America', 1);
echo mb_substr('あいうえおかきくけこ', 3);

// 実行結果

// merica
// かきくけこ
```

#### strtolower(), strtoupper()

- strtolower()はアルファベットの小文字変換。

- strtoupper()はアルファベットの大文字変換。

- [公式マニュアル](http://php.net/manual/ja/function.strtolower.php)

- [公式マニュアル](http://php.net/manual/ja/function.strtoupper.php)

```php
// strtolower(対象文字列)

$name = "JOHN,Bob,michaEl";
$result = strtolower($name);
echo $result;

// 実行結果

// john,bob,michael
```

```php
// strtoupper(対象文字列)

$name = "JOhN,Bob,michaEl";
$result = strtoupper($name);
echo $result;

// 実行結果

// JOHN,BOB,MICHAEL
```

#### strlen(), mb_strlen()

- strlen() は文字列のバイト数を返す。

- mb_strlen はマルチバイト文字の文字数を返す。

- [公式マニュアル](http://php.net/manual/ja/function.strlen.php)

- [公式マニュアル](http://php.net/manual/ja/function.mb-strlen.php)

```php
// strlen(対象文字列)

$name = 'Michael';
echo strlen($message);

//　実行結果

// 7
```

```php
// mb_strlen(対象文字列)

$message = '私は男です';
echo mb_strlen($message);

//　実行結果

// 5
```

#### strpos(), mb_strpos()

- 指定文字列が何文字目に存在するかを返す。

- 大文字小文字を区別しない場合、stripos()、mb_stripos() が用意されている。

- [公式マニュアル](http://php.net/manual/ja/function.strpos.php)

- [公式マニュアル](http://php.net/manual/ja/function.mb-strpos.php)

```php
// strpos(検索対象文字列,指定文字列)

$name = 'michael';
$findword   = 'a';
$result = strpos($name, $findword);

if ($result === false) {
    echo "'$findword' は、'$name' の中で見つかりませんでした";
} else {
    echo "'$findword' が、'$name' の中で見つかりました\n";
    echo "位置 : $result";
}

// 実行結果

/*
'a' が、'michael' の中で見つかりました
位置 : 4
*/
```

#### mb_convert_encoding()

- 文字エンコーディングを変換する。

- [公式マニュアル](http://php.net/manual/ja/function.mb-convert-encoding.php)

```php
// mb_convert_encoding(対象文字列,変換文字コード,対象文字コード)

/* 内部文字エンコーディングからSJISへの変換 */
$name = mb_convert_encoding($name, "SJIS");

/* SJISからUTF-8に変換 */
$name = mb_convert_encoding($name, "UTF-8", "SJIS");

/* "auto" 指定で、"ASCII,JIS,UTF-8,EUC-JP,SJIS" に展開 */
$name = mb_convert_encoding($name, "EUC-JP", "auto");
```

#### mb_convert_kana()

- ひらがな・カタカナ、全角・半角を相互に変換する。

- 下記、オプション。

|オプション|意味|
|:---:|:---:|
|r|「全角」英字を「半角」に変換|
|R|「半角」英字を「全角」に変換|
|n|「全角」数字を「半角」に変換|
|N|「半角」数字を「全角」に変換|
|a|「全角」英数字を「半角」に変換|
|A|「半角」英数字を「全角」に変換|
|s|「全角」スペースを「半角」に変換|
|S|「半角」スペースを「全角」に変換|
|k|「全角カタカナ」を「半角カタカナ」に変換|
|K|「半角カタカナ」を「全角カタカナ」に変換|
|h|「全角ひらがな」を「半角カタカナ」に変換|
|H|「半角カタカナ」を「全角ひらがな」に変換|
|c|「全角カタカナ」を「全角ひらがな」に変換|
|C|「全角ひらがな」を「全角カタカナ」に変換|
|V|濁点付きの文字を一文字に変換|

- [公式マニュアル](http://php.net/manual/ja/function.mb-convert-kana.php)

```php
// mb_convert_kana(対象文字列,オプション)

/* 「半角カタカナ」を「全角カタカナ」に変換し、「全角」英数字を「半角」に変換。 */
$str = mb_convert_kana($str, "KVa");
```

#### trim(), ltrim(), rtrim()

- 文字列の前後からスペースやタブなどの空白文字や指定された文字を取り除く。

- trim() は前後から取り除き、ltrim() は左から、rtrim() は右からのみ取り除く。

- [公式マニュアル](http://php.net/manual/ja/function.trim.php)

- [公式マニュアル](http://php.net/manual/ja/function.ltrim.php)

- [公式マニュアル](http://php.net/manual/ja/function.rtrim.php)

```php
// trim(対象文字列)
// rtrim(対象文字列)
// ltrim(対象文字列)

$name = ' satou ';
$job = ' engineer ';
$origin = ' japan ';

$new_name = trim($name);
$new_job = ltrim($job);
$new_origin = rtrim($origin);

var_dump($new_name);
var_dump($new_job);
var_dump($new_origin);

// 実行結果

/*
string(5) "satou"
string(9) "engineer "
string(6) " japan"
*/
```

#### mt_rand()

- 指定された範囲でランダムな数値を返す。

- rand()より高精度。

- [公式マニュアル](http://php.net/manual/ja/function.mt-rand.php)

```php
// mt_rand(最小値,最大値)

// オプション指定なし。
echo mt_rand() . "\n";
// オプション指定あり。
echo mt_rand(10,20);

// 実行結果

/*
1458218741
13
*/
```

#### is_string()

- 指定変数が文字列であるかを返す。

- [公式マニュアル](http://php.net/manual/ja/function.is-string.php)

```php
// is_string(変数)

$name="佐藤";
if(is_string($name)){
    echo '文字列です。';
}else{
    echo '文字列ではありません。';
}

// 実行結果

// 文字列です。
```

#### is_int()

- 指定変数が整数型であるかを返す。

- [公式マニュアル](http://php.net/manual/ja/function.is-int.php)

```php
// is_int(対象変数)

$number=78.00;
if (is_int($number)) {
    echo '整数型です。';
}else {
    echo '整数型ではありません。';
}

// 実行結果

// 整数型ではありません。
```

#### is_float()

- 与えられた値が float型(少数) であるかを返す。

- is_double()も存在はするが、is_flostと同様。

- [公式マニュアル](http://php.net/manual/ja/function.is-float.php)

```php
// is_float(対象変数)

$number=78.00;
if (is_float($number)) {
    echo '浮動小数型です。';
}else {
    echo '浮動小数型ではありません。';
}

// 実行結果

// 浮動小数型です。
```

#### is_numeric()

- 与えられた値が数字として扱えるかを返す。文字列でも良い。

- [公式マニュアル](http://php.net/manual/ja/function.is-numeric.php)

```php
// is_numeric(対象変数)

$str_number = '10';
$int_number = 10;

if(is_numeric($str_number)){
    echo 'これは数値として扱える。';
}else{
    echo '駄目です。';
}

// 実行結果

// これは数値として扱える。
```

#### round()
- 小数部分を四捨五入して整形。

- 桁数指定で、変更できる。

- 第三引数での「オプションモード」を指定できる。

- 下記、オプションモード

|定数|意味|
|:---:|:---:|
|PHP_ROUND_HALF_UP|小数点を指定桁数に、0から離れる方向に整形|
|PHP_ROUND_HALF_DOWN|小数点を指定桁数に、0に近づく方向に整形|
|PHP_ROUND_HALF_EVEN|小数点を指定桁数に、次の偶数に整形|
|PHP_ROUND_HALF_ODD|小数点を指定桁数に、次の奇数に整形|

- [公式マニュアル](http://php.net/manual/ja/function.round.php)

```php
// round(値,桁数,オプションモード)

// 通常指定
echo round(34.5) . "\n";
// 桁数指定
echo round(5.5555, 2) . "\n";
echo round(123456789, -3);
// モード指定
echo round(-1.55, 1, PHP_ROUND_HALF_UP) . "\n";
echo round(-1.55, 1, PHP_ROUND_HALF_DOWN) . "\n";
echo round(-1.55, 1, PHP_ROUND_HALF_EVEN) . "\n";
echo round(-1.55, 1, PHP_ROUND_HALF_ODD);

// 実行結果

/*
35
5.56
123457000
-1.6
-1.5
-1.6
-1.5
*/

```

#### floor()
- 小数部分を、小数点以下切り捨てして整形。

- `※値が小さい方へ小数点以下を切り捨てるため、マイナスの場合は注意`

- [公式マニュアル](http://php.net/manual/ja/function.floor.php)

```php
// floor(値)

echo floor(3.14) . "\n";
echo floor(-3.14);

// 実行結果

/*
3
-4
*/
```

#### ceil()
- ceil() は小数点以下切り上げでして整形。

- [公式マニュアル](http://php.net/manual/ja/function.ceil.php)

```php
// ceil(値)

echo ceil(3.14) . "\n";
echo ceil(-3.14);

// 実行結果

/*
4
-3
*/
```

## まとめ
- 今回は、PHP関数メモの第一回目ということで、眼病予防という崇高な目的で始まったはずが、おびただしい量による検索のため、自己傷害を加速させながら記事を書く。
- 「この作業が完了したら、遷移激減を達成でき、やつれ目の卒業ができる」という考えを、同時に発生する整理のための検索によって、予防効果を帳消しにすることから逃避して、楽しい余生の妄想にはげむ。
- 異常な長持ち性のため、今後も多くの情報を整理していくため、眼病予防は別の代替案を模索することにしよう。

## 参考
- https://php-archive.net/php/essential-php-functions/  
→今回もはこちらの記事を参考にしました。大変お世話になりました。