PHPのビルトイン関数

#本記事の概要
本記事は筆者の備忘録的な位置付けで作成したものとなっております。
私でもわかるよう丁寧に（独特な）表現になっておりますことご了承ください。
また、以下のサイトで気軽に関数を試すこともできますので、ぜひ試しながら遊んでみてください。
https://paiza.io/projects/mL8PaRyCwNERG3TGBOTwAQ

#phpとは
html,cssなどで作成する静的webページと異なり、`動的なwebページを作成する`ことができる。
動的なWebページとはアクセスしたタイミングや状況によって表示内容が変わるページ。
JavaScriptがクライアント側の処理をするのと異なり、webサーバー側の処理をすることができる。
#ビルトイン関数とは
phpに用意されている関数。
これとは他に、自身で定義することができるユーザー定義関数がある。

#　公式サイト
php.netで確認できる。
英語で出てくるので、調べる際は`文字列 関数 site:php.net`と調べると日本語で出てくるのでおすすめ。

#関数

|目的|関数|注意点|
|---|---|---|
|文字のバイト数を返す|strlen('こんにちは')|バイト数を返すため、左記の場合15と出る|
|数字を三桁区切りにする|number_format(数字)|ない|
|配列の要素がランダムに配置される|shuffle([配列])||
|配列ないの重複した要素を省いた配列を返す|array_unique([配列])||||||
|文字列を返す|sprintf()||
|文字列を返す|printf()||



###文字列
|目的|関数|注意点|
|-|-|-|
|文字のバイト数を返す|strlen('文字列')|日本語を対象にする際には以下を使用|
|文字のバイト数を返す|mb_strlen('文字列')||
|空白や改行の除去|trim()||
|対象となる最初の文字を探してくる|strpos('対象文字列','探す文字')|一番左の文字が0番目と数えられることに注意。日本語を対象とする場合は以下を使用|
|対象となる最初の文字を探してくる|mb_strpos('対象文字列','探す文字')|上記に同じ|
|文字の置換|str_replace('何を','どのように','何の')|文字コードがUTF-8なら日本語でも問題なく使用できる|
|対象文字列を抽出する|substr('文字列','位置',桁数)|str_replaceとの使い分けに注意？|
|対象文字列を置き換える|substr_replace(文字列,置換文字列,位置,桁数)||
|文字列を検索、置換する（正規表現で検索する）|preg_match(パターン,検索対象,返り値)|最初に見つかったもののみ抽出|
|文字列を検索、置換する（正規表現で検索する）|preg_match_all(パターン,検索対象,返り値)|見つかった対象全て抽出|
|文字列を検索、伏字に置換する|preg_ replace(パターン,伏字表記,対象)||

#####使用例
```strlen,mb_strlen.
<?php
// Your code here!

$jp_title = ' こんにちは 　 ';
echo strlen($title).PHP_EOL;
echo mb_strlen($jp_title).PHP_EOL;
?>
👉出力結果：18
※英字は1バイト、日本語１文字は3バイト、半角空白は1バイト、全角空白は３バイトとして出力される
```
```strpos,mb_strpos.
<?php
$title = 'he-llo';
$jp_title = 'こん-にちは';
echo strpos($title,'-').PHP_EOL;
echo mb_strpos($jp_title,'-').PHP_EOL;
?>
👉出力結果：2,2
```

```str_replace.
<?php
$title = 'こんにちは';
$newTitle = str_replace('にち','ばん',$title);
echo $newTitle;
?>
👉出力結果：こんばんは
はいこんばんは
```
```substr,substr_replace.
<?php
$address = '20220131Tokyo 100';
echo substr($address,4,4);
?>
👉出力結果：0131
```

```preg_match,preg_match_all.
<?php
$input = '20220131Tokyo 100 090-9999-1111';
$pattern = '/\d{3}-\d{4}-\d{4}/';

preg_match($pattern, $input,$matches);
print_r($matches);
?>
👉出力結果：090-9999-1111
```
```preg_replace.
<?php
$input = '20220131Tokyo 100 090-9999-1111';
$pattern = '/\d{3}-\d{4}-\d{4}/';

$newInput = preg_replace($pattern, '***-****-****',$input);
print_r($newInput);
?>
👉出力結果：20220131Tokyo 100 ***-****-****
```

### <font color="red">配列</font>
|目的|関数|注意点|
|-|-|-|
|配列を文字列に落とし込む|"配列[引数]-配列[引数]..."||
|同上|implode（’区切りに使用するもの’,配列）|単純に区切りを書き換えるだけならこちらの方が簡単|
|上記と逆の操作。配列を生成する|explode(対象文字,配列)||
|先頭に要素を追加|array_unshift(配列,'追加する要素')|<font color="red">元配列に変更あり</font>|
|先頭の要素を削除|array_shift(配列)|<font color="red">元配列に変更あり</font>|
|末尾に要素を追加|array_push(配列,'追加する要素')|<font color="red">元配列に変更あり</font>|
|末尾の要素を削除|array_pop(配列)|<font color="red">元配列に変更あり</font>|
|配列から要素を抽出し、新たに配列を生成する|array_slice(配列,開始位置,個数)|<font color="red">新しく配列を生成する。元配列に変更なし</font>配列の最後まで指定する際は、個数を省略できる。指定位置に-を使用し、配列の末尾から要素を取得することも可能|
|配列から要素を抽出、挿入できる|array_splice()|<font color="red">新しく配列を生成する。元配列を変更する</font>|
|配列の要素を小さい順に並び替える|sort()|使用例省略|
|配列の要素を大き順に並び替える|rsort()|使用例省略|
|配列の要素をランダムに並び変える|shuffle()|<font color="red">元配列に変更を加える</font>|
|配列から指定した　数だけ要素を抽出して配列を生成する|array_rand(配列,数字)|新たに配列を生成する|
|指定した配列を生成する|array_fill(インデックス,個数,要素の値)||
|配列を生成する|range(最初の要素,最後の要素,(何個刻み))||
|要素の合計を求める|array_sum()||
|要素の個数を求める|count(配列)||
|各要素に対し関数を実行する|array_map(関数,要素)|map関数やforeach文と同じイメージ|
|条件に見合う要素を抜き出す|array_filter(配列,条件)||
|キーの抽出|array_keys()|配列で返すことに注意|
|バリューの抽出|array_values()|同上|
|特定のキーがあるか調べる|array_keys_exists(検索したい要素,配列)|使用例省略|
|特定のバリューがあるか調べる|in_array(検索したい要素,配列)|使用例省略|
|値を検索してキーを返す|array_serch(検索したい要素,配列)|使用例省略|
|値でソートする|asort()|使用例省略|
|値でソートする|arsort()|使用例省略|
|キーでソートする|ksort()|使用例省略|
|キーでソートする|krsort()|使用例省略|
|多次元配列をソートする|usort(配列,関数)||
|多次元配列において、複数の項目を起点に並び替える|array_multisort()||




#### 使用例
```配列→文字列.
<?php
$date = [1900,12,31];
echo "$date[0]-$date[1]-$date[2]"
?>
👉出力結果：1900-12-31
```
```implode.
<?php
$date = [1900,12,31];
echo implode ('-',$date);
?>
👉出力結果：1900-12-31
```
```explode.
<?php
$date = '12:43:2000';
print_r(explode(':',$date))
?>
👉出力結果：
Array
(
    [0] => 12
    [1] => 43
    [2] => 2000
)
```

```slice.
<?php
$array = ['りんご','ゴリラ','ラッパ'];
$newArray = array_slice($array,0,2);
print_r($newArray);
print_r($array);
?>
👉出力結果
Array
(
    [0] => りんご
    [1] => ゴリラ
)
Array
(
    [0] => りんご
    [1] => ゴリラ
    [2] => ラッパ
)
```
```array_splice.
<?php
$array = ['りんご','ゴリラ','ラッパ'];
$newArray = array_splice($array,0,2,'挿入');
print_r($array);
?>
👉出力結果
Array
(
    [0] => 挿入
    [1] => ラッパ
)
```
```
<?php
$scores = array_fill(0,5,10);
print_r($scores);
?>
👉出力結果
Array
(
    [0] => 10
    [1] => 10
    [2] => 10
    [3] => 10
    [4] => 10
)
```

```array_map().
<?php
 $a = [3,4,8];
 $b= array_map(
     fn($n) =>
     $n * 10
     ,
     $a
     );
     print_r($b);
?>
👉出力結果
Array
(
    [0] => 30
    [1] => 40
    [2] => 80
)
```

```array_filter.
<?php
 $a = [1,2,3,4,8];
 $b= array_filter( 
     $a,
     function($n){
         if($n % 2 === 0){
             return true;
         }else{
             return false;
         }
     });   
     print_r($b);
?>
```

```usort.
<?php
$data = [
  ['name' => 'taguchi', 'score' => 80],
  ['name' => 'kikuchi', 'score' => 60],
  ['name' => 'hayashi', 'score' => 70],
  ['name' => 'tamachi', 'score' => 60],
];

usort(
  $data,
  function($a,$b){
      if($a['score'] === $b['score']){
      return 0;
    }
      return $a['score'] > $b['score']?1:-1;
  });
  print_r($data);
出力結果
Array
(
    [0] => Array
        (
            [name] => kikuchi
            [score] => 60
        )

    [1] => Array
        (
            [name] => tamachi
            [score] => 60
        )

    [2] => Array
        (
            [name] => hayashi
            [score] => 70
        )

    [3] => Array
        (
            [name] => taguchi
            [score] => 80
        )

)
```

### 配列同士の演算
|目的|関数|注意点|
|-|-|-|
|配列同士を連結させる|array_merge(配列,配列)|重複に注意。スプレッド構文でもいい|
|配列同士を連結させる|...()etc...||
|前の配列から、後の配列との差分を表示させる|array_diff(配列,配列)||
|各配列より共通の要素を抜き出す|array_intersect(配列,配列)||


#### 使用例
```array_merge.
<?php
$a = [3,4,8];
$b = [4,8,12];
$c = array_merge($a,$b);
print_r($c);
?>
出力結果
Array
(
    [0] => 3
    [1] => 4
    [2] => 8
    [3] => 4
    [4] => 8
    [5] => 12
)
```

```スプレッド構文.
<?php
 $a = [3,4,8];
 $b = [4,8,12];
 $c = [...$a,...$b];
 print_r($c);
?>
出力結果
Array
(
    [0] => 3
    [1] => 4
    [2] => 8
    [3] => 4
    [4] => 8
    [5] => 12
)
```
```array_diff.
<?php
 $a = [3,4,8];
 $b = [4,8,12];
 $c = array_diff($a,$b);
print_r($c);
?>
出力結果
Array
(
    [0] => 3
)

```
```array_intersect.
<?php
 $a = [3,4,8];
 $b = [4,8,12];
 $c = array_intersect($a,$b);
 print_r($c);
?>
出力結果：
Array
(
    [1] => 4
    [2] => 8
)
```

### 数字
|目的|関数|注意|
|-|-|-|
|小数点以下切り上げ|ceil()|使用例省略|
|小数点以下切り下げ|floor()|使用例省略|
|小数点以下四捨五入|round()|使用例省略|
|指定した数字になるよう四捨五入|round(対象,数字)|使用例省略|
|数字をランダムに表示|mt_rand(最小の数字,最大の数字)|使用例省略|
|最大値、最小値の取得|max(),min()|使用例省略|
|π|M_PI|使用例省略|
|平方根|M_SQRT数字|使用例省略|