PHPでの配列とハッシュ(連想配列)の書き方(初学者向け)

# はじめに
PHPの基本をこの記事で書いていきます。
PHPの初学者の方向けの記事です。実際にコードを書いたりして
実際の挙動などを確認してみてください。

# 環境
MAMPをインストールします。
エディタはVScodeです。

# 環境構築方法
MAMPの環境構築が動画でわかりやすく載っていました。
PHPで出力する時はMAMPで出力するのでこちらを確認してください。

https://www.youtube.com/watch?v=I9xgwLfNnD4&list=PLErg7aSNT21xAVbJAEWS1oxgGLL__ySK2


# バージョン
以下のバージョンで挙動を確認しました。

![スクリーンショット 2022-03-31 1.32.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/a3a83f23-1ba1-6e36-7d77-7d8531989048.png)

# 配列とは
簡単にいうと***データのかたまり***のことです。
つまり***データをたくさん詰められるタンスのような役割***をしています。
そして、データ１つ１つは箱のようなもので、```要素```と呼んでいます。

例えば、それぞれ名前(文字列)を格納するようなイメージになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/341e8869-6973-46a6-2123-be09df6926ff.png)

>引用　　https://www.web-knowledge-info.com/wp/php6/


箱１つ１つには番号が振られていて、この番号を添字と呼んでいます。添字は0から始まります。

### 変数と配列を比較する
変数と配列を比較していきましょう。

まず変数からです。変数名を動物にしていきます。
``` php
<?php
//変数
$animal_1 = "犬";
$animal_2 = "猫";
$animal_3 = "猿";

echo $animal_1. "<br>". $animal_2. "<br>". $animal_3; //brは改行

//犬
//猫
//猿
```
ただこの変数の数が10000個とかになると時間がかかってしまいますよね。
そこで配列が登場します。配列を見ていきましょう。

```php
<?php
//配列
$animal[0] = "犬";
$animal[1] = "猫";
$animal[2] = "猿";

echo $animal[0]. "<br>". $animal[1]. "<br>". $animal[2];
//犬
//猫
//猿
```
配列では***[添字]***を入れていきます。

## 配列の格納
配列を実際に格納のやり方を見ていきます。

```php
$animal = ["犬","猫","猿"];
echo $animal;

//犬
//猫
//猿

$animal = ["犬", "猫", "猿"];
echo $animal[0] . "<br>";
//犬
```
数字でも表せます。
```php
$array = [10,20,30];  //arrayは配列
echo $array[0];
echo $array[1];
//10
//20
```
***プログラムは0から始まり***ます。

var_dumpで配列を中身を見てみます。
```php
$array = [10,20,30];
var_dump($array);

// array(3) { [0]=> int(10) [1]=> int(20) [2]=> int(30) }
```
出力を見やすくするのに```<pre>```を使います。
```php
<?php

$array = [10,20,30];
echo "<pre>";
var_dump($array);
echo "<pre>";

//array(3) {
//  [0]=>
//  int(10)
//  [1]=>
// int(20)
// [2]=>
// int(30)
//}
```
### デバック関数print_r
デバック用にPHPが用意している関数で、***print_r***と言います。
配列の中身を確認したりするときに使います。

```php
$score[0] = 100;

echo $score[0]. "<br>";

echo print_r($score). "<br>";

//100
//Array ( [0] => 100 ) 1
 ```
var_dumpも入れてみると

```php
$score[0] = 100;

echo $score[0]. "<br>";

echo print_r($score). "<br>";
echo var_dump($score);

//100
//Array ( [0] => 100 ) 1
//array(1) { [0]=> int(100) }
```
***var_dumpはprunt_rよりも詳しく確認したい***場合に使います。

# ハッシュ(連想配列)
```ハッシュ```とは***keyやvalueを入れて配列よりもわかりやすく表した***ものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/640736b3-2362-a599-5490-9d73ef9fc4e7.png)

>引用　https://www.web-knowledge-info.com/wp/php6/


さらにハッシュでは$data以外にもいろいろなグループに分けたりすることができます。
ex) $school,$Playerなど


### 配列の初期化
配列の初期化のやり方は下記のコードになります。

```php
<?php
//配列の初期化
$array = array();
$array = [];

echo print_r($array);

//Array ( ) 1
```
***値を入れた初期化の方法***です。

```php
<?php
$animal =  ["ライオン","チーター","トラ"];
echo print_r($animal);

//Array ( [0] => ライオン [1] => チーター [2] => トラ ) 1
```



### ハッシュの書き方
まずは簡単な書き方からです。
```php
$score[0] = 100;
$score[3] = 70;
echo $score[0] . "<br>";
echo $score[3] . "<br>";
//100
//70

$score[0] = 100;
$score[3] = 70;
echo print_r($score) . "<br>";

//Array ( [0] => 100 [3] => 70 ) 1
//"<br>"は改行

$score["japanese"] = 100;
$score["english"] = 70;
echo print_r($score) . "<br>";
//Array ( [japanese] => 100 [english] => 70 ) 1

$intKey = 50;
$age[$intKey] = 100;
echo print_r($age) . "<br>";
//Array ( [50] => 100 ) 1

$score["japanese"] = 100;
$score["english"] = 70;
echo print_r($score) . "<br>";

$intKey = 50;
$age[$intKey] = 100;
echo print_r($age) . "<br>";

$strKey = "math";
$score[$strKey] = 80;
echo print_r($score) . "<br>";

//自動割り当て
$fruits[] = "apple";
$fruits[] = "orange";
echo print_r($fruits) . "<br>";
//Array ( [0] => apple [1] => orange ) 1

$height[0] = 160;
$height[1] = 170;
$height[2] = 180;
echo $height[0] . "<br>";

$height[] = 190;
echo print_r($height) . "<br>";
//160
//Array ( [0] => 160 [1] => 170 [2] => 180 [3] => 190 ) 1
```

ここではサッカー選手を変数にしていきます。

```php
<?php
$soccer_player = ["name" => "メッシ","nation" => "アルゼンチン","height" => 169];

echo  $soccer_player["name"];
//メッシ
```
連想配列ではechoの後にkeyの部分を入れたりします。
var_dumpなどで中身を見ていきます。

```php
<?php
$soccer_player = ["name" => "メッシ","nation" => "アルゼンチン","height" => 169];
echo  $soccer_player["name"];

echo "<pre>";
var_dump($soccer_player);
echo "</pre>";

//メッシ
//array(3) {
//  ["name"]=>
// string(9) "メッシ"
//  ["nation"]=>
//  string(18) "アルゼンチン"
//  ["height"]=>
// int(169)
//}
```

## キーと値の初期化

次にキーと値を入れて初期化していきます。

```php
<?php
$soccer_player =  [
    "メッシ" => "Messi",
    "ロナウド" => "Ronald",
    "ネイマール" =>  "Neymar",
];
echo print_r($soccer_player) . "<br>";

//Array ( [メッシ] => Messi [ロナウド] => Ronald [ネイマール] => Neymar ) 1
```
ロナウドを出力したい場合は
```php
<?php
$soccer_player =  [
    "メッシ" => "Messi",
    "ロナウド" => "Ronald",
    "ネイマール" =>  "Neymar",
];
 print_r($soccer_player ). "<br>";
 echo $soccer_player["ロナウド"]. "<br>";
//Array ( [メッシ] => Messi [ロナウド] => Ronald [ネイマール] => Neymar ) 
//Ronald
 ```

##  多次元配列
***配列の中に配列があるもの***を```多次元配列```と言います。
```php
<?php
$pokemon_1 = [
    "ピカチュウ","ミュウ","ミュウツー"
];

$pokemon_2 = [
        "リザードン","カメックス","フシギバナ"
];

//この２つの配列を組み合わせて多次元配列

$my_pokemon = [
    $pokemon_1, $pokemon_2  
];
?>

<pre><?php echo print_r($my_pokemon). "<br>"; ?></pre>
```
で実行すると
```
Array
(
    [0] => Array
        (
            [0] => ピカチュウ
            [1] => ミュウ
            [2] => ミュウツー
        )

    [1] => Array
        (
            [0] => リザードン
            [1] => カメックス
            [2] => フシギバナ
        )

)
1
```

さらに下のコードを入れると以下のように出ます。
```php
<?php echo $my_pokemon[0][2]. "<br>";
echo $my_pokemon[1][0]. "<br>";
//ミュウツー
//リザードン
```
今回は２つしか配列はないですが、配列の数が増えるとどんどん階層が深くなっていきます。

### 多次元配列を出力
多次元配列を下の例題に沿って書いていきます。

```
下のポケモンの名前、レベル、タイプの値が入った２次元配列を作り、
連想配列を1つ作って、その配列の中身を全て出力する
①名前　:　ピカチュウ　レベル : 70 　タイプ　: "電気"
②名前　:　リザードン　レベル : 90   タイプ　: "炎"
③名前　:　ミュウツー　レベル : 100  タイプ　: "エスパー"
```

```php
$pokemon = [
["name" => "ピカチュウ", "level" =>  70, "type" => "電気"],
["name" => "リザードン", "level" =>  90, "type" => "炎"],
["name" => "ミュウツー", "level" =>  100, "type" => "エスパー" ],
];

$Pikachu = ["name" => "ピカチュウ", "level" =>  70, "type" => "電気"];
$Charizard = ["name" => "リザードン", "level" =>  90, "type" => "炎"];
$Mewtwo = ["name" => "ミュウツー", "level" =>  100, "type" => "エスパー"];

//$pokemon = [$Pikachu,$Charizard,$Mewtwo];
?>

<pre><?php echo print_r($pokemon). "<br>";?> </pre>
```
出力すると

```
Array
(
    [0] => Array
        (
            [name] => ピカチュウ
            [level] => 70
            [type] => 電気
        )

    [1] => Array
        (
            [name] => リザードン
            [level] => 90
            [type] => 炎
        )

    [2] => Array
        (
            [name] => ミュウツー
            [level] => 100
            [type] => エスパー
        )

)
1
```

ちなみにvar_dumpを使うと
```php
<pre><?php var_dump($pokemon). "<br>";?> </pre>
```

```
array(3) {
  [0]=>
  array(3) {
    ["name"]=>
    string(15) "ピカチュウ"
    ["level"]=>
    int(70)
    ["type"]=>
    string(6) "電気"
  }
  [1]=>
  array(3) {
    ["name"]=>
    string(15) "リザードン"
    ["level"]=>
    int(90)
    ["type"]=>
    string(3) "炎"
  }
  [2]=>
  array(3) {
    ["name"]=>
    string(15) "ミュウツー"
    ["level"]=>
    int(100)
    ["type"]=>
    string(12) "エスパー"
  }
}
```




# PHPの基礎がわからない方向けの記事
全くわからない方は下の記事を読んでみてください。

https://qiita.com/Hashimoto-Noriaki/items/3d89e79c1f031afc7b96

https://qiita.com/Hashimoto-Noriaki/items/9ba6af2960a6d8d6342f

https://qiita.com/mackeyTA/items/069900b5c2366fb30e3a

# 参考資料
https://qiita.com/Hashimoto-Noriaki/items/63026ef88a58975e2cfb

https://www.youtube.com/watch?v=SjyYR4vDMn8&list=PLErg7aSNT21xAVbJAEWS1oxgGLL__ySK2&index=4