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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

Q&A

解決済

1回答

561閲覧

配列に指定した値があるか判定し、if文で条件分岐をする方法

emi_ono

総合スコア83

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

0グッド

0クリップ

投稿2022/02/27 07:51

前提・実現したいこと

日時選択tableを作っています。
12:00〜18:30を15分間隔でforeachを使い表示し、条件によって表示する文字を変えたいのですが、if文の一部がうまくいきません。

データベースに登録した日時と合致したら「なし」と表示したいです。
例えばデータベースに2022-02-27 13:00と値があったら、2/27の13:00の所に「なし」

完成イメージ

データベースから取り出した値を配列$breakTime[] に入れ、 in_array()を使い$breakTime[]$result1の値があれば「なし」と表示。。と考えたのですが「なし」と表示できません。
タイムスタンプに変換してみたり、elseifの場所を変更したり、いろいろ試してみたのですが解決方法が見つけられません。よろしくお願いします。

発生している問題

PHP

1if ( in_array( $week[$todayWeek ], $closed ) || in_array( $today, $closedDay ) ) { 2 echo "ー"; 3} elseif(in_array( $result1, $breakTime ) ){ 4echo "なし"; 5}elseif ( strtotime( date( 'H:i' ) ) > strtotime( $time ) ) { 6 echo "×"; 7} elseif ( strtotime( date( 'H:i' ) ) > strtotime( $time ) || $time <= $HalfAnHour ) { 8 echo "TEL"; 9} else { 10 echo "OK"; 11}

elseif(in_array( $result1, $breakTime ) ){ echo "なし"; }
この部分以外の分岐はうまく表示されます。

配列breakTim[]の中身

PHP

1array(3) { [0]=> string(16) "2022-02-27 13:00" [1]=> string(16) "2022-02-27 18:00" [2]=> string(16) "2022-02-25 20:45" }

コード全体

html

1<?php 2/*DB接続*/ 3require_once( '../../core/config.php' ); 4try { 5 6 // PDOインスタンスを生成 7 $dbh = new PDO( DSN, DB_USER, DB_PASS ); 8 $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 9} catch ( PDOException $e ) { 10 11 // エラーメッセージを表示させる 12 echo 'データベースにアクセスできません!' . $e->getMessage(); 13 14 // 強制終了 15 exit; 16} 17date_default_timezone_set( 'Asia/Tokyo' ); 18//ID 19$shop_id = 1; 20//今日の日付を取得 21$todayFmt1 = date('m/d'); 22$today = date('Y-m-d'); 23//曜日を配列に格納 24$week = [ 25 '日', //0 26 '月', //1 27 '火', //2 28 '水', //3 29 '木', //4 30 '金', //5 31 '土', //6 32]; 33//今日の曜日を取得 34$todayWeek = date('w'); 35//定休日 36$closed = [ 37 '火', 38]; 39//開始時間設定(時) 40$start = "12:00"; 41//終了時間設定(時) 42$end = "18:30"; 43//時間取得(30分後) 44$HalfAnHour = date( "H:i", strtotime( $nowTime . "+30 minute" ) ); 45//時間間隔(分) 46$timeFrame = "15"; 47//予約table時間変数設定 48$begin = new DateTime($start); 49$end = new DateTime($end); 50$interval = new DateInterval('PT'.$timeFrame.'M'); 51$daterange = new DatePeriod($begin, $interval, $end->modify('+1 min')); 52//データーベースから呼び出す 53$sql = 'SELECT * FROM holiday WHERE shop_id = ' . $shop_id; 54$prepare = $dbh->query( $sql ); 55$prepare->execute(); 56$dbh = null; 57 58while ( true ) { 59 $rec = $prepare->fetch( PDO::FETCH_ASSOC ); 60 if ( $rec == false ) { 61 break; 62} 63//(休みの日) 64if( $rec['holiday'] && empty($rec['break_time'])){ 65$closedDay[] = $rec['holiday']; 66} 67//(休み時間) 68if( $rec['break_time']){ 69$breakTime[] = $rec['break_time']; 70} 71} 72//echo "breakTim = "; 73//var_dump($breakTime); 74?> 75<!--※※日時選択table※※--> 76<table> 77<th class="no">時間</th> 78<th> <?php echo $todayFmt1; ?><?php echo $week[ $todayWeek ];?><br> 79<?php 80if ( in_array( $week[ $todayWeek ], $closed ) ) { 81 echo "<span>定休日</span>"; 82} elseif ( in_array( $today, $closedDay ) ) { 83 echo "<span>休業日</span>"; 84} else { 85 echo "&nbsp;"; 86} 87?></th> 88 89<?php 90foreach($daterange as $date){ 91$time = $date->format("H:i") . "\n"; 92 93$variable = $today.$time; 94$variableSplit = str_split($variable, 10); 95$result1 = implode(' ', $variableSplit); 96?> 97<tr class='day_table'> 98<td class="time"><?php echo $result1; ?></td> 99<!--今日--> 100<td><input type='radio' name='day' id='<?php echo $today.$time; ?>' value='<?php echo $today.$time; ?>' > 101<label for='<?php echo $today.$time;?>'> 102<?php 103 104if ( in_array( $week[$todayWeek ], $closed ) || in_array( $today, $closedDay ) ) { 105 echo "ー"; 106} elseif(in_array( $result1, $breakTime ) ){ 107echo "なし"; 108}elseif ( strtotime( date( 'H:i' ) ) > strtotime( $time ) ) { 109 echo "×"; 110} elseif ( strtotime( date( 'H:i' ) ) > strtotime( $time ) || $time <= $HalfAnHour ) { 111 echo "TEL"; 112} else { 113 echo "OK"; 114} 115?> 116</label> 117</td> 118 119</tr> 120<?php 121} 122?> 123</table> 124

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/02/27 10:43

まだ回答がついていないようでしたので、コメントしてみます。 in_arrayで探す値が少し気になりました。 分割したり、結合したり、でちょっと混乱してしまいますが、 `$time = $date->format("H:i") . "\n";` のようにしていますので、改行コードが含まれてしまってはいないでしょうか?
m.ts10806

2022/02/27 11:07

文字列よりユニックスタイムで比較したほうが良いと思います。 strtotime()
emi_ono

2022/02/27 11:39

xg63ex2bさん ありがとうございます! "\n"を削除で解決しました。 本当にありがとうございます。 ご指摘の分割や結合も含めもっとスッキリ書けるようになりたいのですが、、難しいです。 xg63ex2bさんを評価したいのですが、どうすれば良いでしょうか?
emi_ono

2022/02/27 11:40

m.ts10806さん ありがとうございます。
退会済みユーザー

退会済みユーザー

2022/02/27 11:44

ご丁寧にコメントありがとうございます。 解決したようで良かったです。 自己解決になるようにご自身で回答を入力してクローズすることでOKと思います。 (私の手元にはPHPの環境もなく再現確認もできていませんでしたので・・)
emi_ono

2022/02/27 13:59

ありがとうございました!
guest

回答1

0

自己解決

$time = $date->format("H:i") . "\n";

「. "\n"」を削除する事で解決できました。

$time = $date->format("H:i") ;

投稿2022/02/27 14:13

emi_ono

総合スコア83

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問