Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@john03msms

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

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

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

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

スクリーンショット 2021-05-15 5.30.41.png

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ランクに上がることができました。
値取得・出力に悩んでいる方の参考になれば幸いです。

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What is going on with this article?