PHPのビルトイン関数まとめ（配列）

# はじめに
PHPの学習をはじめたので、アウトプットとして記載します。

# ビルトイン関数とは
ビルトインとはあらかじめ組み込まれていることを意味します。
関数は自身で作ることができますが、PHPにはあらかじめ用意された関数があり、それらをビルトイン関数と呼びます。

# PHPのビルトイン関数（配列）

implode：配列をつなげる

```:phpファイル
$d = [2020, 11, 15];
echo implode('_', $d) . PHP_EOL;
=> 2020_11_15
```

explode：変数を配列にする

```:phpファイル
$t = '17:32:45';
print_r(explode(':', $t));
=> Array
(
    [0] => 17
    [1] => 32
    [2] => 45
)
```

array_unshift：配列の先頭に要素を加える、array_push：配列の末尾に要素を加える

```:phpファイル
$scores = [30, 40, 50];

array_unshift($scores, 10, 20);
print_r($scores);
=> Array
(
    [0] => 10
    [1] => 20
    [2] => 30
    [3] => 40
    [4] => 50
)

array_push($scores, 60, 70);
print_r($scores);
=> Array
(
    [0] => 10
    [1] => 20
    [2] => 30
    [3] => 40
    [4] => 50
    [5] => 60
    [6] => 70
)
```

array_shift：配列の先頭の要素を削除する、array_pop：配列の末尾の要素を削除する

```:phpファイル
$scores = [30, 40, 50];

array_shift($scores);
print_r($scores);
=> Array
(
    [0] => 40
    [1] => 50
)

array_pop($scores);
print_r($scores);
=> Array
(
    [0] => 40
)
```

array_splice：配列の要素を削除・追加できる

```:phpファイル
$scores = [30, 40, 50, 60, 70, 80];

array_splice($scores, 2, 3); //2番目の要素から3つ分の要素を削除する
print_r($scores);
=> Array
(
    [0] => 30
    [1] => 40
    [2] => 80
)
```

```:phpファイル
$scores = [30, 40, 50, 60, 70, 80];

array_splice($scores, 2, 3, 100); //2番目の要素から3つ分の要素を削除し、その位置に100を追加する
print_r($scores);
=> Array
(
    [0] => 30
    [1] => 40
    [2] => 100
    [3] => 80
)
```

```:phpファイル
$scores = [30, 40, 50, 60, 70, 80];

array_splice($scores, 2, 0, [100, 101]); //2番目の要素から削除はせずに、100と101を追加する
print_r($scores);
=> Array
(
    [0] => 30
    [1] => 40
    [2] => 100
    [3] => 101
    [4] => 50
    [5] => 60
    [6] => 70
    [7] => 80
)
```

array_slice：配列から要素を切り取る

```:phpファイル
$scores = [30, 40, 50, 60, 70];

以下は３行は全て同じ意味の記述
$partial = array_slice($scores, 3, 2); //3番目の要素から2つ分の要素を切り取る
$partial = array_slice($scores, 2); //3番目の要素から最後の要素の要素まで切り取る
$partial = array_slice($scores, -2); //後ろから2番目の要素から最後の要素まで切り取る

print_r($partial);
=> Array
(
    [0] => 60
    [1] => 70
)
```

sort：配列を値の小さい順に並べ替える、rsort：配列を値の大きい順に並び替える、shuffle：配列の順番はランダムに並び替える

```:phpファイル
$scores = [40, 50, 20, 30];

sort($scores);
print_r($scores);
=> Array
(
    [0] => 20
    [1] => 30
    [2] => 40
    [3] => 50
)

rsort($scores);
print_r($scores);
=> Array
(
    [0] => 50
    [1] => 40
    [2] => 30
    [3] => 20
)

shuffle($scores);
print_r($scores);
=> Array
(
    [0] => 20
    [1] => 30
    [2] => 40
    [3] => 50
)
```

array_rand：配列のキーをランダムに切り取る

```:phpファイル
$scores = [40, 50, 20, 30];

$picked = array_rand($scores, 2);
echo $scores[picked[0]] . PHP_EOL;
echo $scores[picked[0]] . PHP_EOL;
=> 出力する度に配列からランダムに2つの値が出る
```

array_fill：配列に値を指定した個数入れる

```:phpファイル
$scores = array_fill(0, 5, 10); //0番目から5個分の要素に10を入れる
```

range：配列に順番に値を入れる

```:phpファイル
$scores = range(2, 10); //2~10までの値が配列の要素を入れる
$scores = range(2, 10, 3); //2に3ずつ足して10以下の値を配列の要素に入れる([2, 5, 8])
```

array_sum：配列を全て足し合わせる

```:phpファイル
$scores = [1, 2, 3];
echo array_sum($scores); //1+2+3
=> 6
```

array_merge：複数の配列をつなげる

```:phpファイル
$a = [3, 4, 8];
$b = [4, 8, 12];
$c = [1, 2];

$merged = array_merge($a, $b, $c); //[3, 4, 8, 4, 8, 12, 1, 2]
```

array_unique：配列から重複している要素を取り除く

```:phpファイル
$a = [3, 4, 8];
$b = [4, 8, 12];

$merged = array_merge($a, $b); //[3, 4, 8, 4, 8, 12]
array_unique($merged); //[3, 4, 8, 12]
```

array_diff：第一引数の配列から第二引数の配列の要素と同じものを取り除く

```:phpファイル
$a = [3, 4, 8];
$b = [4, 8, 12];

array_diff($a, $b); //[3, 4, 8]から4と8が取り除かれ、[3]となる
```

array_intersect：引数の配列の共通要素のみ配列にする

```:phpファイル
$a = [3, 4, 8];
$b = [4, 8, 12];
$c = [3, 4, 8];

array_intersect($a, $b, $c); //[4, 8]
```

array_map：配列に対し関数の処理を実行する

```:phpファイル
$prices = [100, 200, 300];

$newPrices = array_map(
  function($n) {return $n * 1.1;}, //第一引数に関数（fn($n) => $n * 1.1に置き換えても同じ意味）
  $prices　　　　　　　　　　　　　　　 //第二引数に配列
);
//$newPrices = [110, 220, 330]
```

array_filter：配列に関数の処理を実行し、Trueのものだけ取り出す

```:phpファイル
$numbers = range(1, 10); //$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

$evenNumbers = array_filter(
  $numbers,              //第一引数に配列
  fn($n) => $n % 2 === 0 //第二引数に関数
);
//$evenNumbers = [2, 4, 6, 8, 10]
```

array_keys：配列のキーのみ取り出す、array_values：配列のバリューのみ取り出す

```:phpファイル
$scores = [
  'dog' => 80,
  'cat' => 70,
  'rat' => 60,
];

array_keys($scores); //['dog', 'cat', 'rat']
array_values($scores); //[80, 70, 60]
```

array_key_exists：指定したキーがあればtrue、なければfalseを返す
in_array：指定したバリューがあればtrue、なければfalseを返す

```:phpファイル
$scores = [
  'dog' => 80,
  'cat' => 70,
  'rat' => 60,
];

array_key_exists('dog', $scores); //true
in_array(80, $scores); //true
```

array_search：指定したバリューを探し、そのキーを返す

```:phpファイル
$scores = [
  'dog' => 80,
  'cat' => 70,
  'rat' => 60,
];

array_search(70, $scores); //cat
```

asort：キーを保持したまま、バリューを昇順に並び替える
arsort：キーを保持したまま、バリューを降順に並び替える
ksort：キーを昇順に並び替える
krsort：キーを降順に並び替える
※キーを添字以外で指定していた場合、sortやrsortで並び替えるとキーが添字に変換されてしまう。

```:phpファイル
$scores = [
  'dog' => 80,
  'cat' => 70,
  'rat' => 60,
];

asort($scores);
print_r($scores);
=> Array
(
    [rat] => 60
    [cat] => 70
    [dog] => 80
)

arsort($scores);
print_r($scores);
=> Array
(
    [dog] => 80
    [cat] => 70
    [rat] => 60
)

ksort($scores);
print_r($scores);
=> Array
(
    [cat] => 70
    [dog] => 80
    [rat] => 60
)

krsort($scores);
print_r($scores);
=> Array
(
    [rat] => 60
    [dog] => 80
    [cat] => 70
)
```

usort：何を比較して並び替えるか定義できる関数（配列の中に複数の配列がある場合）

```:phpファイル
$data = [
  ['name' => 'dog', 'score' => 80],
  ['name' => 'cat', 'score' => 60],
  ['name' => 'rat', 'score' => 70],
  ['name' => 'fox', 'score' => 60],
];

usort(
  $data,
  function($a, $b){
    if($a['score'] === $b['score']) {
      return 0;
    }                                           //並び替えない時は0を返す
    return $a['score'] > $b['score'] ?  1: -1;  //並び替える時は後ろに回すものに1、前に回すものに-1を返す
  }
);

print_r($data);
=> Array
(
    [0] => Array
        (
            [name] => cat
            [score] => 60
        )

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

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

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

)
```

array_column：配列のカラム内の値を取得する

```:phpファイル
$data = [
  ['name' => 'dog', 'score' => 80],
  ['name' => 'cat', 'score' => 60],
  ['name' => 'rat', 'score' => 70],
  ['name' => 'fox', 'score' => 60],
];

$scores = array_column($data, 'score');
print_r($scores);
=> Array
(
    [0] => 80
    [1] => 60
    [2] => 70
    [3] => 60
)
```

array_multisort：配列を複数のカラムで並び替える時に使う

```:phpファイル
$data = [
  ['name' => 'dog', 'score' => 80],
  ['name' => 'cat', 'score' => 60],
  ['name' => 'rat', 'score' => 70],
  ['name' => 'fox', 'score' => 60],
];

$scores = array_column($data, 'score');
$names = array_column($data, 'name');

array_multisort(
  $scores, SORT_DESC, SORT_NUMERIC, //SORT_DESCは降順、SORT_NUMERICは数値を意味するオプション
  $names, SORT_DESC, SORT_STRING, //SORT_STRINGは文字列を意味するオプション、デフォルトは昇順
  $data
);

print_r($data);
=> Array
(
    [0] => Array
        (
            [name] => dog
            [score] => 80
        )

    [1] => Array
        (
            [name] => rat
            [score] => 70
        )

    [2] => Array
        (
            [name] => fox
            [score] => 60
        )

    [3] => Array
        (
            [name] => cat
            [score] => 60
        )

)
```

# 参考
ドットインストール

# 最後に
本投稿が初学者の復習の一助となればと幸いです。