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


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

Paizaの値取得サンプルコード解説

Paizaを始めた頃は、以下のコードが何を意味しているのかよく分かりませんでした。

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";
}
?>

コメントアウトしている部分が自分なりの解釈になります

Paizaの値取得・出力サンプルコード
<?php
//最初の行の数値を$input_lineに格納:中身は[2]
$input_line = trim(fgets(STDIN));
//$input_line(2)回処理を行う
for ($i = 0; $i < $input_line; $i++) {
//$sに1行分の値を格納[2 5]
    $s = trim(fgets(STDIN));
//$sの余分な改行を削除("\r\n","\r","\n")*3つとも改行を意味する
    $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

1文字取得

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

入力値
1

$input = trim(fgets(STDIN));
echo $input;

出力値
1

空白区切りで取得

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

入力値
2 5

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

出力値
2
5

連続する文字列を1文字ずつ取得したい場合

str_splitを使い、1文字づつ配列に格納しています。
配列宣言をしなくても、配列になってくれるのがPHPの楽なところですね。

入力値
Paiza

<?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

2次元配列に格納したい場合

複数行+空白区切りの値取得は2次元配列を使用します。
*連続する文字列を1文字づつ取り出したい場合はfor文の中身をexplodeからstr_splitに変更することで対応できます。

入力値
3 5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15

<?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"
}
}

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

配列内の値確認
<?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で入出力チェックは行っていますが、
おかしいところや疑問点があれば、ご指摘ください。

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