🦔

空行のある文字列を分割して出力したい場合

2022/10/01に公開

この記事でわかること

  1. 空行がある文字列を配列の要素としてまとめる
  2. (1)が複数行ある場合のまとめる方法
    a. 2次元配列
    b. 配列

1. 空行がある文字列を配列の要素としてまとめる

 1 2 3

こんな感じで1行に複数の文字があるものを普通に読み込むと

$number = fgets(STDIN);
echo $number;

//出力
1 2 3
//======================
echo gettype($number)

//出力
string

一つの文字列として取得される

これを1,2,3のようにひとつずつ取得し配列にしたい場合
explode関数を使ってみるのがおすすめです
explodeのドキュメントはこちらです

文字列の配列を返します。
文字列を文字列により分割する

explode(string $separator, string $string, int $limit = PHP_INT_MAX): array

文字列の配列を返します。この配列の各要素は、 string を文字列 separator で区切った部分文字列となります。

要するに指定した文字列によって別の文字列を区切ることができるってことですね!
文字列を文字列で区切って配列化する

やってみる

イメージはこんな感じ

$number = explode(" ", $number);
echo $number

//出力
array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
  [2]=>
  string(1) "3"
}

これで空行毎で区切って配列化できました!!

次は、こんな感じで文字列が複数行あった場合に配列化するパターンを2例紹介します

 1 2 3
 4 5 6
 7 8 9
 10 11 12

2. (1)が複数行ある場合のまとめる方法(2次元配列)

イメージはこんな感じ
 

$column = 空行で区切った時の配列の要素数()
$row = 空行混じりの文字列の数(行数)
for($x=0;$x<$column;$x++){
        $a = trim(fgets(STDIN));
        $number[] = explode(" ", $a);
}
 echo $number;
//出力
 array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
  [2]=>
  string(1) "3"
}

array(3) {
  [0]=>
  string(1) "4"
  [1]=>
  string(1) "5"
  [2]=>
  string(1) "6"
}

array(3) {
  [0]=>
  string(1) "7"
  [1]=>
  string(1) "8"
  [2]=>
  string(1) "9"
}

array(3) {
  [0]=>
  string(2) "10"
  [1]=>
  string(2) "11"
  [2]=>
  string(2) "12"
}

//特定の要素
echo $number[0][1];

//出力
2

echo $number[2][1]

//出力
8

2. (1)が複数行ある場合のまとめる方法(配列)

イメージはこんな感じ

$column = 空行で区切った時の配列の要素数()
$row = 空行混じりの文字列の数(行数)

for($x=0;$x<$row;$x++){
        $空行混じりの文字列 = trim(fgets(STDIN));
	
	//空行混じりの文字列を空行毎に分割し要素化する
        $空行混じりの文字列 = explode(" ", $ccc);
	
	//要素化したものを$numerへ入れていく
        foreach($ccc as $適当な変数名){
            $number[] = $適当な変数名;
        }
}
echo var_dump($number);

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

Discussion