例えば以下のような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(' / ');} }
サクッと全部に付加して最後に削るか、ちょっと手間をかけて無駄な付加をしないようにするか、目的や状況に合わせて使い分けるといい。