【PHP】これで配列取得も自由自在！？Paizaの値取得・出力方法まとめ

Paizaの値取得・出力方法が分かりにくかったので、簡単に取得できる方法をまとめました。

##Paizaの値取得サンプルコード解説
Paizaを始めた頃は、以下のコードが何を意味しているのかよく分かりませんでした。

![スクリーンショット 2021-05-15 5.30.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591686/3aa78b3b-637e-bcb1-8e3d-1f7b92d40f91.png)

```PHP:Paizaの値取得・出力サンプルコード
<?php
$input_line = trim(fgets(STDIN));
for ($i = 0; $i < $input_line; $i++) {
    $s = trim(fgets(STDIN));
    $s = str_replace(array("\r\n","\r","\n"), '', $s);
    $s = explode(" ", $s);
    echo "hello = ".$s[0]." , world = ".$s[1]."\n";
}
?>
```
コメントアウトしている部分が自分なりの解釈になります

```PHP:Paizaの値取得・出力サンプルコード
<?php
//最初の行の数値を$input_lineに格納：中身は[2]
$input_line = trim(fgets(STDIN));
//$input_line(2)回処理を行う
for ($i = 0; $i < $input_line; $i++) {
//$sに１行分の値を格納[2 5]
    $s = trim(fgets(STDIN));
//$sの余分な改行を削除("\r\n","\r","\n")*３つとも改行を意味する
    $s = str_replace(array("\r\n","\r","\n"), '', $s);
//$sを空白区切りで値を再代入 $s[0]->2 $s[1]->5
    $s = explode(" ", $s);
    echo "hello = ".$s[0]." , world = ".$s[1]."\n";
}
?>
```

https://paiza.jp/guide/samplecode

参照元：https://paiza.jp/guide/samplecode



##1文字取得
サンプルコード１行目のように1文字だけ取得したい場合
>入力値
>1

```PHP
$input = trim(fgets(STDIN));
echo $input;
```
>出力値
>1

##空白区切りで取得
サンプルコード2行目のように空白区切りで1文字づつ取得したい場合
>入力値
>2 5

```PHP
<?php
    $input = explode(" ", trim(fgets(STDIN)));
    echo $input[0]."\n";
    echo $input[1]."\n";
?>
```

>出力値
>2
>5

##連続する文字列を1文字ずつ取得したい場合
str_splitを使い、1文字づつ配列に格納しています。
配列宣言をしなくても、配列になってくれるのがPHPの楽なところですね。
>入力値
>Paiza

```PHP
<?php
    $input = str_split(trim(fgets(STDIN)));
    for($i=0; $i<count($input); $i++){
        echo $input[$i]."\n";
    }
    // $input[0] = P
    // $input[1] = a
    // $input[2] = i
    // $input[3] = z
    // $input[4] = a
?>
```
>出力値
>P
>a
>i
>z
>a

##２次元配列に格納したい場合
複数行＋空白区切りの値取得は２次元配列を使用します。
＊連続する文字列を1文字づつ取り出したい場合はfor文の中身を**explode**から**str_split**に変更することで対応できます。
>入力値
>3 5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15

```PHP
<?php
    $input = explode(" ",trim(fgets(STDIN)));
    $rows = $input[0];
    $columns = $input[1];
    for($i=0; $i<$rows; $i++){
        $array[$i] = explode(" ",trim(fgets(STDIN)));
    }
    var_dump($array);
?>
```

情報量が多いので、echoではなく、var_dumpで確認しています。

>出力値
>array(3) {
  [0]=>
  array(5) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
    [2]=>
    string(1) "3"
    [3]=>
    string(1) "4"
    [4]=>
    string(1) "5"
  }
  [1]=>
  array(5) {
    [0]=>
    string(1) "6"
    [1]=>
    string(1) "7"
    [2]=>
    string(1) "8"
    [3]=>
    string(1) "9"
    [4]=>
    string(2) "10"
  }
  [2]=>
  array(5) {
    [0]=>
    string(2) "11"
    [1]=>
    string(2) "12"
    [2]=>
    string(2) "13"
    [3]=>
    string(2) "14"
    [4]=>
    string(2) "15"
  }
}

２次元配列になっているので、少し分かりにくいかもしれません。
どのように値が入っているかというと以下のようになります。

```PHP:配列内の値確認
<?php
    echo $array[0][0]."\n";//1
    echo $array[0][1]."\n";//2
    echo $array[0][2]."\n";//3
    echo $array[0][3]."\n";//4
    echo $array[0][4]."\n";//5

    echo $array[1][0]."\n";//6
    echo $array[1][1]."\n";//7
    echo $array[1][2]."\n";//8
    echo $array[1][3]."\n";//9
    echo $array[1][4]."\n";//10

    echo $array[2][0]."\n";//11
    echo $array[2][1]."\n";//12
    echo $array[2][2]."\n";//13
    echo $array[2][3]."\n";//14
    echo $array[2][4]."\n";//15
?>
```

##まとめ
いかがだったでしょうか。
記事内のコードはPaizaIOで入出力チェックは行っていますが、
おかしいところや疑問点があれば、ご指摘ください。

https://paiza.io/ja/projects/new

配列操作ができるようになるとPaizaの学習がグッと楽しくなります。
２次元配列の取得・出力方法がわかった時にBランクに上がることができました。
値取得・出力に悩んでいる方の参考になれば幸いです。