LoginSignup
2

More than 1 year has passed since last update.

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

Posted at

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2