配列の要素をカンマや記号等で区切りながら出力したい時のいくつかの方法

投稿者: | 2017年6月16日

例えば以下のような7つの要素を持った配列がある。

$item_arr = array('A','B','C','D','E','F','G');

この配列の中身(要素)をすべて表示(出力)したい時

最も簡単なのは

PHP

foreach($item_arr as $item){
    echo $item;
}

出力結果

ABCDEFG

要素の羅列で構わなければこれで良いが、個々の区切りが分からないから、普通は出力時に「、」やカンマ、「/」のような記号を付けて書き出す。

PHP

foreach($item_arr as $item){
    echo $item;
    echo ('/');
}

出力結果

A/B/C/D/E/F/G/

個々の区切りは判別しやすくなったが、各要素の出力時に「/」を付加しているため、当然最後の要素(G)の後にも「/」が書き出されている。
このままではデータとして中途半端な感じが否めない。

最後の「/」を削除するにはいくつかの方法がある。

まずは、カンマ区切りのデータで最後のカンマを1つ削りたい時にも使う「rtrim」

例)

$str = rtrim($str, ",");

次に、最後の文字を削除する「substr」

$str = substr($str, 0, -1);

ただしこの場合、区切りに2バイトの文字や記号を使っていると文字化けする。

区切りに2バイト文字や2バイトの記号を使っている場合は、マルチバイトに対応した「mb_substr」を使う。
引数に文字コードを正しく指定することがポイント。

$str = mb_substr($str,0,1,"utf-8");

そして別の方法として、最初から無駄なカンマや記号を出力しない方法もある。

処理の流れ

$item_arr = array(‘A’,’B’,’C’,’D’,’E’,’F’,’G’);

配列の数をカウントする
$cnt = count($item_arr);

カウンターの初期化
$i = 0;

foreachで各処理を行う
foreach($item_arr as $item){

カウンターに1を加算
$i++;

要素を出力
echo $item;

カウンターが配列の個数と違う場合はカンマや「/」を付加
if($cnt !=$i){echo(‘ / ‘);}
}

出力結果

A/B/C/D/E/F/G

解説

配列の個数は常に「7」
Aの時 → カウンター「1」 → 「/」を付加
Bの時 → カウンター「2」 → 「/」を付加
Cの時 → カウンター「3」 → 「/」を付加
Dの時 → カウンター「4」 → 「/」を付加
Eの時 → カウンター「5」 → 「/」を付加
Fの時 → カウンター「6」 → 「/」を付加
Gの時 → カウンター「7」

Gの時、配列の個数「7」とカウンターの数値が一致するから「/」は付加されない。

実際のスクリプト

$item_arr = array('A','B','C','D','E','F','G');
$cnt = count($item_arr);
$i = 0;
foreach($item_arr as $item){
    $i++;
    echo $item;
    if($cnt !=$i){echo(' / ');}
}

サクッと全部に付加して最後に削るか、ちょっと手間をかけて無駄な付加をしないようにするか、目的や状況に合わせて使い分けるといい。