エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


配列の値をテキスト表示する際に「、」でつなげるときの処理方法の一例

   

配列の中身を「、」でつなげて文字列とする場合の処理の一例

 
配列として取得したデータを「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をしたいときに使えるでしょう。

 - PHP・Smarty・ECCUBE

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

指定した数で文字列を丸める関数substr、mb_substr、mb_strimwidthの違い
指定した数で文字列を丸める(n文字目で…にする)関数substr、mb_substr、mb_strimwidthの違い

文字列を指定された数で抜き出すPHPの関数、substr、mb_substr、mb_strimwidthについての解説。似た関数だが引数の指定方法が違ったり、文字数がバイト数か文字数かも違ったり、注意が必要だ。

PHP画面が真っ白 header(“Location: $url”);

PHPの開発で header(“Location: $url”);を使うと画面が真っ白になる不具合が出る場合もあります。

ECCUBEの管理画面のSSL設定をインストール後に変更する方法

ECCUBEをインストールした後から管理画面のSSL設定を変更する方法を解説します。config.phpファイルのHTTPS_URLとADMIN_FORCE_SSLの値を変更すればOK。

乱数発生器(パスワード生成サービス)がバージョンアップで高速化!
乱数発生器(パスワード生成サービス)がバージョンアップで高速化!

乱数やパスワードを生成する乱数発生器を高速化!重複しない10桁、20桁の文字列を10万件、20万件と生成することも可能!イベントのキャンペーンのシリアルコードなどにも利用可能!

PHPでスクレイピング。phpQueryとphp-simple-html-dom-parserの比較と設置方法
PHPでスクレイピング。phpQueryとphp-simple-html-dom-parserの比較と設置方法

「PHP スクレイピング」で検索すると「phpQuery」ばかりヒットするが、10年以上も放置されている。なので今も開発が続いている「PHP Simple HTML DOM Parser」をオススメする。

WindowsのXAMPPのPHPではstrptimeは使用不可。代替はdate_parse_from_formatを使う
WindowsのXAMPPのPHPではstrptimeは使用不可。代替はdate_parse_from_formatを使う

strptimeはWindowsのPHPには未実装。LinuxとMacで挙動が異なる。PHP8.1で非推奨になる。なので日付のチェックはdate_parse_from_formatを使おう。使い方を詳細解説。

ECCUBEでアップロードできない。upload_max_filesizeを設定する場所

テンプレートをアップロードする際に発生するエラー「テンプレートファイルがアップロードされていません」の対処方法。これはファイル容量の制限に引っかかっています。

PHP range関数を使って階乗と重複組み合わせを計算

PHPの range関数を使って階乗と重複組み合わせを計算し、それを元に乱数発生器を作成しました。

ファイル変更だけ!ECCUBEの本番から開発環境をコピーする手順を解説

ECCUBEを本番から開発環境をコピーする際の手順を解説。PGMメンテに必要な開発環境を構築する手順を解説。ECCUBEの仕組みは簡単なので作業は5分ほど。

ECCUBEでカード決済NGの受注情報をマイページ購入履歴に表示しない方法解説

ECCUBEでカード決済に失敗しても購入履歴一覧に注文情報(受注情報)が表示される問題への対処方法を解説。受注情報レコードの作成の流れとステイタスについても解説。