配列の値をテキスト表示する際に「、」でつなげるときの処理方法の一例
配列の中身を「、」でつなげて文字列とする場合の処理の一例
配列として取得したデータを「foreach」の繰り返し処理で「読点(、)」を加えて出力しようとした場合、「イヌ、サル、キジ、」という感じになります。
一番最後の「、」を何とかしたい!と思うことが多々ありましたので、こんな処理を考えました。
配列を foreachで繰り返し処理をした場合の問題点の確認
配列を foreachで繰り返し処理をした場合のサンプルが下記になります。
1 2 3 4 5 6 7 8 |
$array = [ 0=>["type"=>"イヌ","order"=>"1st"], 1=>["type"=>"サル","order"=>"2nd"], 2=>["type"=>"キジ","order"=>"3rd"], ]; foreach ( $array as $val ) { echo $val["type"] . "、"; } |
これだと、
「イヌ、サル、キジ、」
という出力になります。
一番最後の「、」は要らないのに!と思うのです。
というのが問題で、最後の「、」がない状態にする処理方法を 3つほど考えてみました。
配列を文字列で連結してテキストにする関数 implodeを使う方法
今回紹介する 3つの方法の中で一番お勧めの方法がこれになります。
配列を文字列で連結してテキストにする関数 implodeを使う方法です。
1 2 3 4 5 6 7 8 9 10 |
$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()」を使う方が単純な処理になります。
1 2 3 4 5 6 7 |
$array = [ 0=>["type"=>"イヌ","order"=>"1st"], 1=>["type"=>"サル","order"=>"2nd"], 2=>["type"=>"キジ","order"=>"3rd"], ]; $textArray = array_column($array, 'type'); echo implode("、",$textArray); |
出力した「、」を置換する関数 preg_replaceを使う方法
一番最初の foreachで繰り返す処理を生かしつつ、出力する際に最後の「、」を削除する処理方法がこちらになります。
1 2 3 4 5 6 7 8 9 10 11 |
$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; |
この処理は多くの方が最初に思い付く処理なんじゃないかと思います。
一番最後の「、」が不要なのでそれを削除するという、考え方としてすごく直球勝負な感じがします。
この方法でも問題はないのですが、「正規表現」+「日本語」を置換するという方法が、個人的には好きではないですね。
(日本語を置換するという処理をあまり信用していないためですね。)
配列の要素数をカウントし最後の要素の時に「、」を付与しない方法
最初に配列の要素数をカウントし、最後の要素の順番になった時には「、」を付与しないという方法が下記になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$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をしたいときに使えるでしょう。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
PHPで配列の値をダブルクオーテーションで囲んでimplodeでカンマ区切りにする方法
PHPで配列の値を、preg_replace関数でクォーテーションで囲み、implode関数で「,(カンマ)」で区切ってテキスト化する方法。この方法であれば配列が空でも分岐の処理は必要なし!
-
-
路線・駅検索のために緯度経度からPHPで2点間の距離を計算する処理解説
路線・駅検索の仕組みの構築は大変。それを簡易に実装するために緯度経度を元に距離計算をする仕組みを考案。まずは2点間の距離を計算する仕組みを解説し、距離計算にまつわる関連技術も紹介。
-
-
サーバ移転、PHPバージョンアップでPHPのソースコードが表示される・ショートタグのPHPが動かない
PHPでショートタグを使うのは危険。サーバ移転やバージョンアップで動かなくなる!ソースが丸見え、設定情報流出のリスクが!php.iniのshort_open_tagの設定を再確認。
-
-
ob_start、ob_get_contents関数でPHPの標準出力をバッファリング・変数に代入
標準出力をバッファリングし変数に代入することができるob_start()関数の解説。include()の処理をバッファリングすることで自由な場所に処理を記述することが可能。
-
-
ECCUBEの商品一覧ページのSEO対策!rel=”next” rel=”prev”を設定
Googleは関連あるページはその旨明示するよう求めています。ECCUBEの商品一覧ページでその求めに応じるための「rel=”next”」「rel=”prev”」について解説します。
-
-
ファイル変更だけ!ECCUBEの本番から開発環境をコピーする手順を解説
ECCUBEを本番から開発環境をコピーする際の手順を解説。PGMメンテに必要な開発環境を構築する手順を解説。ECCUBEの仕組みは簡単なので作業は5分ほど。
-
-
指定した数で文字列を丸める(n文字目で…にする)関数substr、mb_substr、mb_strimwidthの違い
文字列を指定された数で抜き出すPHPの関数、substr、mb_substr、mb_strimwidthについての解説。似た関数だが引数の指定方法が違ったり、文字数がバイト数か文字数かも違ったり、注意が必要だ。
-
-
cURLを利用する際の注意点「
&
」があるURLは「”
」で囲むcURLでURLはダブルクォーテーションで囲む。LinuxでもWindowsでもコマンドでは「&」は意味を持つ文字のためエラー原因になる。クォーテーションは常につけておく方が無難。
-
-
WindowsのXAMPPのPHPではstrptimeは使用不可。代替はdate_parse_from_formatを使う
strptimeはWindowsのPHPには未実装。LinuxとMacで挙動が異なる。PHP8.1で非推奨になる。なので日付のチェックはdate_parse_from_formatを使おう。使い方を詳細解説。
-
-
ECCUBEでテンプレートファイルのファイルサイズは10MB以下のものを使用してくださいのエラーが出た場合
テンプレートをアップロードする際にファイルサイズが大きすぎてエラーが表示される際の対処方法解説。パラメータ設定で設定する制限について解説を行っています。