📘
空行のある文字列を分割して出力したい (explodeを使う)
この記事でわかること
- 空行がある文字列を配列の要素としてまとめる
- (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