PHP 配列

## はじめに
配列です。たくさんの値が入ったやつ。
自分用のまとめなので間違いや自分が完全に理解しているところに関しては省略して書いていることもあります。ご了承お願いします。

:::note warn
コード書いていて気づいたのでが、配列はechoで出力できません。
print_rまたはvar_exportなどを使うと出力できます。
:::
また、配列[0]のように指定した要素なら出力できます(PHPが文字列に変換して出力してくれているらしい)
見返した時見落としそうなので目立つように記載しておきます。

## 配列の定義
配列名 = [値1, 値2, 値3];
```php
$scores = [10, 20, 30, 40];
```
以下のような書き方もできます。
```php
$scores = [
    10,
    20,
    30,
    40,
];
```

## 値の追加
```php
$score[] = 200;
print_r($score);
```
```php
    [0] => 100
    [1] => 20
    [2] => 30
    [3] => 40
    [4] => 200
```
また、同時にキーを指定することも可能です。
```php
$score['a'] = 5;
print_r($score);
```
```
    [0] => 100
    [1] => 20
    [2] => 30
    [3] => 40
    [4] => 200
    [a] => 5;
```
配列名の後に[]を付けず値を追加しようとすると、配列から変数に変わってしまいます。

## 値の変更
一つ上で追加した分は無視してください。配列の値の変更を行えます。1番目が0です。
```php
$score[0] = 100;

print_r($score);
```
```
    [0] => 100
    [1] => 20
    [2] => 30
    [3] => 40
```

## 値に対してキーを指定する
配列名 = ['キー' => 値];です。
```php
$scores = [
    'first' => 100,
    'second' => 20,
    'third' => 30,
    'fourth' => 40,
];
```
ちなみにこの状態で値の書き換えをしてみました。1番目の値を書き換えます。
```php
$scores = [
    'first' => 10,
    'second' => 20,
    'third' => 30,
    'fourth' => 40,
];

$scores[0] = 30;


print_r($scores);
```
```php
    [first] => 10
    [second] => 20
    [third] => 30
    [fourth] => 40
    [0] => 30
```
1番目の値を書き換えるには$scores[0] = 30;とすればいいと思いました。
ですが1番目の値を書き換えるためには1番目のキーを指定しないといけないんですね。
キーを指定せずに配列に値を入れるとその値に割り振られるキーは0からの順番になるんですね。

もう少し見てみます。
```php
$scores = [
    'first' => 10,
    'second' => 20,
    33,
    'third' => 30,
    'fourth' => 40,
];

$scores[0] = 30;


print_r($scores);
```
```php
    [first] => 10
    [second] => 20
    [0] => 30
    [third] => 30
    [fourth] => 40
```
'second'と'third'の間に33を追加、その後$scores[0]の値を30に書き換えました。
そうすると33が30になりました。キーを指定せずに値を追加するとそれのキーは0から順番に割り振られるんですね。

## foreachを使ってみる
foreachを使うと配列の要素を１つずつ渡すことができます。自分の中ではfor分と同じ感じです。
foreach(配列名 as 配列が入る変数){
    処理;
}
という感じです
```php
foreach($scores as $score){
    print_r($score . PHP_EOL);
}
```
```php
90
40
100
```
asの後に「変数1 => 変数2」と記述すると変数1にキー、変数2に値が入ります。

```php
foreach($scores as $key => $score){
    print_r($key . '->' . $score . PHP_EOL);
}
```
```php
first->90
second->40
third->100
```

## 配列の中に配列を入れてみる
配列の値に配列を使用することも可能です。やってみます。
```php
$addScores = [
    50,
    60,
    70,
];

$scores = [
  90,
  40,
  $addScores,
  100,
];

print_r($scores);
```
```php
Array
(
    [0] => 90
    [1] => 40
    [2] => Array
        (
            [0] => 50
            [1] => 60
            [2] => 70
        )

    [3] => 100
)
```
思ってたのと違うことになりましたね。配列名の前に「...」を付けることで綺麗に並びます。
```php
$addScores = [50,60,70,];

$scores = [
  90,
  40,
  ...$addScores,
  100,
];

print_r($scores);
```
```php
Array
(
    [0] => 90
    [1] => 40
    [2] => 50
    [3] => 60
    [4] => 70
    [5] => 100
)
```
「...」を使う方法は別でも使えます。
関数の引数に「...配列名」とすると関数の仮引数に渡した値が、配列に入って渡されます。
```php
function add(...$scores){
    $total = 0;
    foreach($scores as $score){
        total += $score;
    }
    return $total;
}

print_r(add(10, 20, 30, 40));
```
```php
100
```
便利ですねー、覚えておいて損はないです。

## 複数の返り値
複数の返り値を返す関数を使う時はlist()が便利
```php
function add(...$scores){
    $total = 0;
    foreach($scores as $score){
        $total += $score;
    }
    return [$total , $total / count($scores)];

list($total , $ave) = add(10, 20, 30, 40);
}
```

## 配列の値を連結
配列の値を連結して出力する方法です。implodeを使います。
```php
$colors = ['red', 'blue', 'green'];
$color = implode(',', $colors); //','で$colors配列の値を連結して代入

echo $color;
```
```php
red,blue,green
```

## 終わりに
頭の中で色々イメージしてみると配列ってめっちゃ重要です。しっかり覚えたいですねー。