配列の値をテキスト表示する際に「、」でつなげるときの処理方法の一例
配列の中身を「、」でつなげて文字列とする場合の処理の一例
配列として取得したデータを「foreach」の繰り返し処理で「読点(、)」を加えて出力しようとした場合、「イヌ、サル、キジ、」という感じになります。
一番最後の「、」を何とかしたい!と思うことが多々ありましたので、こんな処理を考えました。
配列を foreachで繰り返し処理をした場合の問題点の確認
配列を foreachで繰り返し処理をした場合のサンプルが下記になります。
$array = [
0=>["type"=>"イヌ","order"=>"1st"],
1=>["type"=>"サル","order"=>"2nd"],
2=>["type"=>"キジ","order"=>"3rd"],
];
foreach ( $array as $val ) {
echo $val["type"] . "、";
}
これだと、
「イヌ、サル、キジ、」
という出力になります。
一番最後の「、」は要らないのに!と思うのです。
というのが問題で、最後の「、」がない状態にする処理方法を 3つほど考えてみました。
配列を文字列で連結してテキストにする関数 implodeを使う方法
今回紹介する 3つの方法の中で一番お勧めの方法がこれになります。
配列を文字列で連結してテキストにする関数 implodeを使う方法です。
$array = [
0=>["type"=>"イヌ","order"=>"1st"],
1=>["type"=>"サル","order"=>"2nd"],
2=>["type"=>"キジ","order"=>"3rd"],
];
$textArray = [];
foreach ( $array as $val ) {
$textArray[] = $val["type"];
}
echo implode("、",$textArray);
ひとまずは出力用の配列に入れなおして、出力をする際に「implode()」関数で連結する方法です。
上記は、何か処理を加えることも想定して「foreach()」で繰り返し処理をしていますが、単純に特定のキーの値の配列を作り直すだけならば下記の「array_column()」を使う方が単純な処理になります。
$array = [
0=>["type"=>"イヌ","order"=>"1st"],
1=>["type"=>"サル","order"=>"2nd"],
2=>["type"=>"キジ","order"=>"3rd"],
];
$textArray = array_column($array, 'type');
echo implode("、",$textArray);
出力した「、」を置換する関数 preg_replaceを使う方法
一番最初の foreachで繰り返す処理を生かしつつ、出力する際に最後の「、」を削除する処理方法がこちらになります。
$array = [
0=>["type"=>"イヌ","order"=>"1st"],
1=>["type"=>"サル","order"=>"2nd"],
2=>["type"=>"キジ","order"=>"3rd"],
];
$text = "";
foreach ( $array as $val ) {
$text .= $val["type"] . "、";
}
$text = preg_replace('/、$/', '', $text);
echo $text;
この処理は多くの方が最初に思い付く処理なんじゃないかと思います。
一番最後の「、」が不要なのでそれを削除するという、考え方としてすごく直球勝負な感じがします。
この方法でも問題はないのですが、「正規表現」+「日本語」を置換するという方法が、個人的には好きではないですね。
(日本語を置換するという処理をあまり信用していないためですね。)
配列の要素数をカウントし最後の要素の時に「、」を付与しない方法
最初に配列の要素数をカウントし、最後の要素の順番になった時には「、」を付与しないという方法が下記になります。
$array = [
0=>["type"=>"イヌ","order"=>"1st"],
1=>["type"=>"サル","order"=>"2nd"],
2=>["type"=>"キジ","order"=>"3rd"],
];
$count = count($array);
$i = 1;
foreach ( $array as $val ) {
echo $val["type"];
if ( $i != $count ) {
echo "、";
}
$i++;
}
最初に配列の数をカウントして、最後のカウントの時は「、」を出力しないという処理です。
これのメリットしては、foreachの繰り返し処理の中で echoをしている点です。
繰り返し処理の中に、他にも実行する処理があるため、繰り返し処理の中で echoをしたいときに使えるでしょう。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
Smartyの Syntax Errorの原因はスペースかも
Smartyのなかなか原因がつかめない Syntax Errorの原因はスペースかもしれません。
-
-
GMOペイメントゲートウェイのjava.io.IOExceptionのエラー
ECCUBEの決済でGMOペイメントゲートウェイのモジュールを使ってテスト決済を行った場合の不具合、java.io.IOExceptionと言うエラーの原因と対策方法の解説です。
-
-
ob_start、ob_get_contents関数でPHPの標準出力をバッファリング・変数に代入
標準出力をバッファリングし変数に代入することができるob_start()関数の解説。include()の処理をバッファリングすることで自由な場所に処理を記述することが可能。
-
-
パーミッション(属性)一括変更ツール・WordPress最適化済
WordPressのパーミッション(属性)を一括変更するツールを作成!ファイル、フォルダのパーミッションが一覧表示でき、ファイルを選んでパーミッションの変更が行えます。
-
-
ECCUBEを開発環境から本番ドメインに変更でエラーが・パス変更について
レンタルサーバでサーバ会社から割り当てられたURLで開発し、本番公開時にドメインを当てたらエラーが!そんな場合の対処方法の解説。対処方法は簡単ですが管理画面からは対応不可。
-
-
ECCUBE2.13.3で商品規格の在庫数が無制限から変更できないバグがある
2.13.3固有のバグである商品規格の在庫数の入力エリアがアクティブにならない不具合を解消する解説です。product_class.tplの2行を修正するだけの簡単対応です。
-
-
連想配列のキーも値もまとめてhtmlspecialchars()でサニタイズする関数の作成解説
PHPの配列・連想配列のキーと値をまとめてhtmlspecialchars()関数でサニタイズ(無害化、無毒化)を行う関数を作成。連想配列のキーはarray_map()関数でのサニタイズは無理。
-
-
数値がMySQLのint(11)に保存できない!PHPの変数が本当にint型か確認!
PHPでintegerとdoubleが混在するような計算をする場合は要注意!計算結果が整数値であっても途中で使用する変数にdoubleの値が入っているときは計算結果がintegerではない場合があります。
-
-
ファイル変更だけ!ECCUBEの本番から開発環境をコピーする手順を解説
ECCUBEを本番から開発環境をコピーする際の手順を解説。PGMメンテに必要な開発環境を構築する手順を解説。ECCUBEの仕組みは簡単なので作業は5分ほど。
-
-
Smartyのテンプレート内の処理で計算、加工をする方法
Smartyのテンプレート上で変数を計算する、加工する方法を解説します。