遅いですが、あけましておめでとうございます。
Webプログラマの篠田です。
今回は、前回の予告通り「「分割」のあとは「結合」でしょ!」ということで配列の結合方法について、ご紹介したいと思います。
配列の結合とは?
PHPでプログラムを作っていると、配列に保存されている要素をテキストにつなげるということが必要になる場合があります。
例えば、下記のような配列を、1つのテキストにしたいと想定して見てみましょう。
1 |
array(4) { [0]=> string(12) "子安武人" [1]=> string(9) "関智一" [2]=> string(15) "三木眞一郎" [3]=> string(12) "結城比呂" } |
1 |
子安武人,関智一,三木眞一郎,結城比呂 |
このように、配列の要素を「,(カンマ)」をつけてつなげる方法を考えてみます。
原始的な結合方法
先程の配列を最も原始的な方法で結合してみたいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php $member = ""; $count = 0; $weiß = array("子安武人","関智一","三木眞一郎","結城比呂"); foreach ($weiß as $value) { if ($count == 0) { $member .= $value; } else { $member .= ",". $value; } $count++; } var_dump($member); |
配列をforeach文を使って、配列の終端まで結合するという手法です。
発想としては簡単なのですが、プログラムにしたときに面倒さもあります。
そのポイントが「,」の扱いです。
文字を結合する場合に、「区切り文字」を挿入して作成するということがよくあります。
今回のように「,」を区切り文字にしたときに、どうしても「先頭」か「終端」に「,」が入ってしまうという問題が発生します。
それを解決する方法として、条件分岐を設置して、ループ回数を基準に「区切り文字」を挿入するかどうかを決めるという方法が考えられます。
foreach文を使うと、PHPの場合はループ回数を取得できませんので、わざわざ「$count」変数を用意して対応しています。
※for文であれば、ループ回数をカウントしているのでもう少しシンプルになります。
ただ、みてもらって分かるように非常に面倒です(苦笑)
配列を結合するだけでこの手間は割に合いません。
効率よく配列を結合する方法
実は、PHPの標準関数には、この面倒な処理を一発で対応することができるものがあります。
それが、「implode(インプロード)関数」です。
この関数は、結合させたい配列と「区切り文字」を指定するだけで、配列を1つのテキストに自動的に結合させることができる優れものです。
先程の配列を「implode関数」を使って実装してみましょう。
1 2 3 4 5 |
<?php $weiß = array("子安武人","関智一","三木眞一郎","結城比呂"); $member = implode(“,", $weiß); var_dump($member); |
これで終わりです。
脅威の簡単さです。
複雑な処理が必要(HTMLタグを挟むなど)な場合などには使用できない可能性がありますが、単純な「区切り文字」で結合させる場合などには、威力を発揮します。
また、「区切り文字」を変更するだけで簡単に修正ができるというのも魅力的です。
まとめ
「区切り文字」で分割をする「explode関数」と、「区切り文字」で結合する「implode関数」を覚えておくだけで、複雑な処理が少し減るかもしれません。
考えている処理が、関数一発で行える場合もありますので「こんなのないかな?」という場合はPHPのリファレンスを見てみるも良いかもしれません。
では、また次回。