前提・実現したいこと
日時選択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 " "; 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
回答1件
あなたの回答
tips
プレビュー