📘

空行のある文字列を分割して出力したい (explodeを使う)

2022/10/08に公開

この記事でわかること

  1. 空行がある文字列を配列の要素としてまとめる
  2. (1)が配列でまとまっている場合複数個ある場合
    a. (1)の工程を繰り返す
    b. 2次元配列で管理する
    c. 配列の中に全部ぶっ込み直す

ネタバレ


シチュエーション

私の知り合いに "野比 のび太"って人がいます。
母の名前は"野比 玉子"
父は"野比 のび助"
妻は"野比 静香"?
子供は"野比 ノビスケ" らしい。
どうやら、のび太さんは、ドラえもんさんに家族を紹介したい様です。
でものび太さんは緊張すると家族紹介ができなくなるらしいので
のび太さんに紹介用の原稿をコードで作ってあげましょう。
手書きやワープロでいいじゃん!!っていうツッコミはしないでくださいね😂


まず、家族全員分を出力させてみる

ではっ!!!
野比家を配列でまとめるとこんな感じ。

$nobi_fam = array("野比 のび太", "野比 のび助", "野比 玉子", "野比 静香", "野比 ノビスケ", "野比 セワシ");

これを一人ずつ表示させたいのだが、単純に繰り返して表出すると下のようになる。

foreach($nobi_fam as $nobi){
    $echo $nobi."\n";
}
//出力
野比 のび太
野比 玉子
野比 のび助
野比 静香
野比 ノビスケ
野比 セワシ

苗字は一緒なので何回も表示させるのはくどくない?
なので
"野比"は一回だけで表示させて、名前だけを表示させていきたい。

//出力イメージ
野比家は 
のび太
玉子
のび助
静香
ノビスケ
セワシ
です

こうするために、今回は氏名の入力され方の特徴を利用してみましょう。
今回は氏名に半角スペースが入っていますね。
なので、それを活かして配列を組み直してみます。


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

explodeを使って、1つの文字列を空行を境に分割して配列にする

$nobita = "野比 のび犬";
$nobita = explode(" ",$nobita);
echo var_dump($nobita);

//出力
array(2) {
  [0]=>
  string(6) "野比"
  [1]=>
  string(9) "のび犬"
}

2. (1)が配列でまとまっている場合複数個ある場合

$nobi_fam = array("野比 のび太", "野比 のび助", "野比 玉子");

今回のシチュエーションを振り返ってみましょう!!
今回は苗字と名前が入った文字列が複数人存在していますよね。
なので、explodeで苗字と名前とで分割し、それぞれを管理する必要があります。


パターン①  <配列の繰り返し処理>

これは、さっきの流れ(半角スペースを境に配列化)を配列の要素[0]から順番にして出力しているだけ。

$count = count($nobi_fam);
for($i=0;$i<$count;$i++){
    $fam = $nobi_fam[$i];
    $fam = explode(" ",$fam);
    echo var_dump($fam);
}
//出力
array(2) {
  [0]=>
  string(6) "野比"
  [1]=>
  string(9) "のび太"
}
array(2) {
  [0]=>
  string(6) "野比"
  [1]=>
  string(9) "のび助"
}
array(2) {
  [0]=>
  string(6) "野比"
  [1]=>
  string(6) "玉子"
}

これで家族紹介をするとこんな感じになる

$nobi_fam = array("野比 のび太", "野比 のび助", "野比 玉子", "野比 静香", "野比 ノビスケ", "野比 セワシ");
$count = count($nobi_fam);
for($i=0;$i<$count;$i++){
    $fam = $nobi_fam[$i];
    $fam = explode(" ",$fam);
    if($i==0){
        echo "$fam"."家には"."\n";
    }
    echo $fam[1]."\n";
    if($i==$count-1){
        echo "がいます";
    }
}
//出力
野比家には
のび太
のび助
玉子
静香
ノビスケ
セワシ
がいます。

パターン②  <二次元配列で管理して繰り返し処理>

今度は苗字と名前を分割して、新たに配列の中でまとめる

<?php
    $nobi_fam = array("野比 のび太", "野比 のび助", "野比 玉子");

    
$count = count($nobi_fam);
    for($i=0;$i<$count;$i++){
    $fam = $nobi_fam[$i];
    $family[] = explode(" ",$fam);
}
echo var_dump($family);
//出力
array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(6) "野比"
    [1]=>
    string(9) "のび太"
  }
  [1]=>
  array(2) {
    [0]=>
    string(6) "野比"
    [1]=>
    string(9) "のび助"
  }
  [2]=>
  array(2) {
    [0]=>
    string(6) "野比"
    [1]=>
    string(6) "玉子"
  }
}

これで家族紹介をするとこんな感じになる

    $nobi_fam = array("野比 のび太", "野比 のび助", "野比 玉子", "野比 静香", "野比 ノビスケ", "野比 セワシ");    
$count = count($nobi_fam);
for($i=0;$i<$count;$i++){
    $fam = $nobi_fam[$i];
    $family[] = explode(" ",$fam);
}
$x=0;
foreach($family as $name){
    if($x==0){
        echo $name[0]."家には"."\n";
    }
    echo $name[1]."\n";
    if($x==$count-1){
        echo "がいます。";
    }
    $x++;
}    
//出力
野比家には
のび太
のび助
玉子
静香
ノビスケ
セワシ
がいます。

パターン③  <分解したものをすべて一つの配列に入れる>

$count = count($nobi_fam);
    
for($i=0;$i<$count;$i++){
    $x=0;
    $fam = $nobi_fam[$i];
    $fam = explode(" ",$fam);
    foreach($fam as $atfam){
    $family[]= $atfam;
    }
}
echo var_dump($family);
//出力
array(6) {
  [0]=>
  string(6) "野比"
  [1]=>
  string(9) "のび太"
  [2]=>
  string(6) "野比"
  [3]=>
  string(9) "のび助"
  [4]=>
  string(6) "野比"
  [5]=>
  string(6) "玉子"
}

全部入れることはできたけど、野比が重複するなあ
これだと、姓名が混同しちゃうので、名だけをいれるように書いてみます!

    $nobi_fam = array("野比 のび太", "野比 のび助", "野比 玉子");
    
    
    $count = count($nobi_fam);
    
    for($i=0;$i<$count;$i++){
        $x=0;
        $fam = $nobi_fam[$i];
        $fam = explode(" ",$fam);
        $last_name = $fam[1];

        $family[]= $last_name;
    }
    echo var_dump($family);
//出力
array(3) {
  [0]=>
  string(9) "のび太"
  [1]=>
  string(9) "のび助"
  [2]=>
  string(6) "玉子"
}

お!名前だけが入ったな!!
じゃあ、これを使ってドラえもんさんに家族紹介をしてみましょう!!!

$nobi_fam = array("野比 のび太", "野比 のび助", "野比 玉子", "野比 静香", "野比 ノビスケ", "野比 セワシ"); 
    
    
$count = count($nobi_fam);
for($i=0;$i<$count;$i++){
    $x=0;
    $fam = $nobi_fam[$i];
    $fam = explode(" ",$fam);
    $last_name = $fam[1];

    $family[]= $last_name;
}
$x=0;
foreach($family as $name){
    if($x==0){
        echo "野比家には"."\n";
    }
    echo $name."\n";
    if($x==$count-1){
        echo "がいます。";
    }
    $x++;
}
//出力
野比家には
のび太
のび助
玉子
静香
ノビスケ
セワシ
がいます。

はい。これでのび太さんはなんとか、ドラえもんさんに家族を紹介できそうです!!

Discussion