📘

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

に公開

この記事でわかること

  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