PHP foreach Loop and Mysqli Fetch associative array problem (Dublicated values)

问题描述 投票:0回答:1

我只需要从数据库中检查 Day is Blocked 是否在选择框中显示为已禁用,如果未在同一选择框中显示接下来的 2 个月的所有日期。 我得到 Closed(Blocked) 天没有问题,但是当我试图让剩下的日子我得到双倍的一切。如果不是其他数组不工作。 结果显示如下所示:

3 月 30 日,星期四, 3月30日星期四 甚至第一个循环的 DISABLED 日在循环后显示双倍。

我的sql

CREATE TABLE `check_availability` (
  `id` int(10) NOT NULL,
  `Day` varchar(10) NOT NULL,
  `Open_hour` varchar(10) NOT NULL,
  `Closed_hour` varchar(10) NOT NULL,
  `ClosedDays` varchar(10) NOT NULL,
  `Blocked` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


INSERT INTO `check_availability` (`id`, `Day`, `Open_hour`, `Closed_hour`, `ClosedDays`, `Blocked`) VALUES
(1, 'Sunday', '09:00am', '10:00pm', '', 1),
(2, 'Monday', '09:00am', '10:00pm', '', 1);

Mysqli 获取代码

$sqlClosedDays   = "SELECT Day FROM check_availability WHERE Blocked ='1'";             
$resultClosed    = mysqli_query($con, $sqlClosedDays);
$DaysClosed   = mysqli_fetch_all($resultClosed,MYSQLI_ASSOC);

我的 for 和 Foreach 循环导致日期显示双倍。

for($i=0;$i<=30;$i++){

    //Get the Closed Days   
    
    //Display the Days according to limit   
    $day=date('l,d M',strtotime("+$i day"));
    $Nday = date('l',strtotime("+$i day"));
    $NdayTrim= substr($Nday, 0, 3);
    $InsDay = date('Y-m-d',strtotime("+$i day"));   
    
    foreach ($DaysClosed as $rowDaysClosed) {   
        $dayClosed = $rowDaysClosed['Day'];
        $dayClosedTrim= substr($dayClosed, 0, 3);
        $dayTrim = substr($day, 0, 3);
        
        //If not Closed set as available
        if ($dayTrim === $dayClosedTrim ) { 
            echo "<option disabled value='$InsDay'>$day</option> "; 
            //$clDays[] = $day;     
        } else {
            echo "<option name='add_r_date' id='add_r_date' value='$InsDay'>$day</option>";
        }
    }//EOF FOREACH LOOP 
}//EOF FOR LOOP 
echo "</select>";

我试过 unset($day);或取消设置($dayClosed);

我试过休息;在循环内,但问题仍然存在。

问题是值显示了 2 次。我只想显示关闭的日子(星期日)和(星期一)并显示休息日正常,以便人们可以选择可用的日期进行预订。

php arrays select foreach mysqli
1个回答
-2
投票

您可以使用 DISTINCT 方法:

$sqlClosedDays   = "SELECT DISTINCT Day FROM check_availability WHERE Blocked ='1'"; 

或者您可以使用 GROUP BY 方法:

$sqlClosedDays   = "SELECT Day FROM check_availability WHERE Blocked ='1' GROUP BY Day";     
© www.soinside.com 2019 - 2024. All rights reserved.