質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

276閲覧

日付の間にカンマを追加したい(foreach)

yosuke1025

総合スコア9

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2024/02/08 13:16

実現したいこと

まず曜日表示のために日付のフォーマットにはnやjのような文字がありまして、
曜日だと、添付画像のように3種類あります。
英語ではなく日本語で表示させたいので、
wのものを使用してみます。

datetimeimmutable format 曜日で検索しました
https://qiita.com/aminevsky/items/a222845ddbdd2536da56#:~:text=%E6%9B%B8%E5%BC%8F%E6%8C%87%E5%AE%9A%[…]%E4%BE%BF%E5%88%A9%E3%81%A7%E3%81%99%E3%80%82
曜日の配列を準備し、
$dayOfWeekで出力された数字と合致した曜日が表示されました。(以下の通りのPHPになります。)
イメージ説明

日付だけではなく、曜日も含む

<?php $days = $cfs->get('date_time'); if($days) :// エラーが出てしまうので、$daysが存在する時だけ表示させるようにします foreach ($days as $day) : // もし $days が存在する場合、ループを実行します // 新しい DateTimeImmutable オブジェクトを作成し、日付をフォーマットします $dateTime = new DateTimeImmutable($day['date']); $dayFormat = $dateTime->format('n/j'); // 曜日の配列を定義し、日付から曜日を取得します $weekdays = ["日", "月", "火", "水", "木", "金", "土"]; // echo $dateTime->format('w'); // 4 などの数字が表示される。 $weekday = $weekdays[$dateTime->format('w')]; // 4の場合配列の4番目(配列は0から数え始めます)の「木」が表示される // $weekdays[4]とすると、4番目のものが配列$weekdaysから取り出されるイメージです ?> <!-- 日付(曜日)の形式で表示するための <p> タグを出力します --> <p><?php echo $dayFormat . "(" . $weekday . ")"; ?></p> <?php endforeach; endif; ?>

次に、本題ですが、カンマを追加する方法です。
イメージ説明
「foreach カンマ」
で検索すると、こちらの記事がありました。
https://on-ze.com/archives/1914
foreach文に下記を追加するとカンマが追加できると思うのですが、上記の日付や曜日と連結するにはどう記述するべきが
不明ですのでご教示いただけますでしょうか。

該当のソースコード

// カンマをつける foreach ($days as $day) : $comma = ""; if(next($days)){ $comma = ","; // 最後の要素ではないとき } endforeach;

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

憶測ですが、こんな感じでしょうか。

カンマを日付と曜日の表示の間に追加するということと仮定して

<?php $days = $cfs->get('date_time'); if($days) :// エラーが出てしまうので、$daysが存在する時だけ表示させるようにします $count = count($days); // 日付の総数を取得 $index = 0; // 現在のインデックスを初期化 foreach ($days as $day) : // もし $days が存在する場合、ループを実行します // 新しい DateTimeImmutable オブジェクトを作成し、日付をフォーマットします $dateTime = new DateTimeImmutable($day['date']); $dayFormat = $dateTime->format('n/j'); // 曜日の配列を定義し、日付から曜日を取得します $weekdays = ["日", "月", "火", "水", "木", "金", "土"]; // echo $dateTime->format('w'); // 4 などの数字が表示される。 $weekday = $weekdays[$dateTime->format('w')]; // 4の場合配列の4番目(配列は0から数え始めます)の「木」が表示される // $weekdays[4]とすると、4番目のものが配列$weekdaysから取り出されるイメージです // カンマを付ける echo $dayFormat . "(" . $weekday . ")"; if (++$index < $count) { echo ","; // 最後の要素でない場合はカンマを付ける } ?> <!-- 日付(曜日)の形式で表示するための <p> タグを出力します --> <p><?php echo $dayFormat . "(" . $weekday . ")"; ?></p> <?php endforeach; endif; ?>

このようにすることで、日付と曜日の間にカンマが追加されます。また、ループの最後の要素の後にはカンマは付かないようになります。

投稿2024/02/09 00:31

shoshinsha123

総合スコア213

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yosuke1025

2024/02/09 08:05

ご教示いただきありがとうございます。 しかし、カンマは付いたものの同じ日付を2つずつ繰り返して表示されている模様です、、 2/8(木),2/8(木)2/9(金),2/9(金)2/10(土),2/10(土)2/11(日)2/11(日)
guest

0

ベストアンサー

array_map() + implode() を使うなど。

php

1<?php 2 $days = $cfs->get('date_time'); 3 4 $weekdays = ["日", "月", "火", "水", "木", "金", "土"]; 5 if ($days): 6 $days_string = implode(",", 7 array_map(function($day) use (&$weekdays) { 8 $dateTime = new DateTimeImmutable($day['date']); 9 $dayFormat = $dateTime->format('n/j'); 10 $weekday = $weekdays[$dateTime->format('w')]; 11 return $dayFormat . "(" . $weekday . ")"; 12 }, $days)); 13?> 14 <!-- 日付(曜日)の形式で表示するための <p> タグを出力します --> 15 <p><?php echo $days_string; ?></p> 16<?php 17 endif; 18?>

投稿2024/02/08 14:39

編集2024/02/09 08:40
melian

総合スコア19825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yosuke1025

2024/02/08 15:43

ご教示いただきありがとうございます。 説明不足で申し訳ございませんが、上記記載通りに$days = $cfs->get('date_time');があります。 これは管理画面より投稿カスタムで日付や曜日を表示させています。 つきましては以下のarray一覧を使用せず、他の方法はございますでしょうか。 $days = [ array('date' => '2024-02-08'), array('date' => '2024-02-09'), array('date' => '2024-02-10'), array('date' => '2024-02-11')
melian

2024/02/08 15:50 編集

回答の $days は動作確認用に作成しています。なので、$weekdays = ["日", "月", "火", "水", "木", "金", "土"]; 以降だけをコピーすればよいかと。
yosuke1025

2024/02/09 08:17

ありがとうございます。カンマは表示されるんですけど、なぜ同じ日付を繰り返しているのでしょうか。 2/8(木),2/9(金),2/10(土),2/11(日) 2/8(木),2/9(金),2/10(土),2/11(日) 2/8(木),2/9(金),2/10(土),2/11(日) 2/8(木),2/9(金),2/10(土),2/11(日)
melian

2024/02/09 08:40

おそらく、ループ内に echo $days_string; を入れてしまっているのだと思います。回答を更新しましたので試してみてください。
yosuke1025

2024/02/10 00:29

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問