0

私はオンライン予約システムに取り組んでおり、現在テーブルの予約 (ID、スロット ID、治療、ユーザー、日付)、治療 (ID、名前、説明、期間)、タイムスロット (ID、時間) を使用しています。予約の最初のページには、治療オプションとカレンダーの日付ピッカーが表示されます。カレンダーの日付を選択すると、これが php ページに送信され、利用可能なタイムスロットのリストが返されます。

このphpページには、予約時間の配列、すべてのスロットの配列があります。予約された時間は、利用可能なすべての時間枠から差し引かれ、残りの配列 (利用可能なすべての時間枠) がユーザーに表示されるため、ユーザーは予定を予約できるすべての時間を確認できます。

ここで、デュレーション変数をミックスに追加したいと思います。これは、予約されたタイムスロット (たとえば 3,5) と利用可能なタイムスロット (1,2,3,4,5,6,7,8,9,10) の配列が、期間が 2 より大きい場合、 2番目の最初の配列は(6,7,8,9,10)です。期間が 2 の場合 (1,2,6,7,8,9,10)、1 の場合 (1,2,4,6,7,8,9,10)。どうすればそんなことができるか知っている人はいますか?

提案の助けとして、これはphpページです:

<?php
include('connection.php');
error_reporting(E_ALL);
 $treatment = $_POST['treatment'];
$bookdate = $_POST['bookdate'];

if(!isset($treatment) && isset($bookdate)){

$else = mysql_query("SELECT * FROM SLOTS");
echo '<SELECT>';
while($array_else = mysql_fetch_array($else)){
echo "<OPTION value=".$array_else['SL_ID'].">".$array_else['SL_TIME']."</OPTION>";
}
echo "</SELECT>";
}else{

    $exp = explode("-", $bookdate);
    //determine what day of the week it is
    $timestamp = mktime(0,0,0,$exp[1],$exp[0],$exp[2]);
    $dw = date( "w", $timestamp); // sun0,mon1,tue2,wed3,thur4,fri5,sat6

    //find bookings with same date
    $q1 = mysql_query("SELECT BOOK_SLOT_ID FROM BOOKINGS WHERE BOOK_DATE='$bookdate'");
    //make array of booking slots
    $array1 = array();
    while ($s1 = mysql_fetch_array($q1)) {
    $array1[] = $s1['BOOK_SLOT_ID'];
    }
    $q2 = mysql_query("SELECT SL_ID FROM SLOTS");
    //make array of all slots
    $array2 = array();
    while ($s2 = mysql_fetch_array($q2)) {
    $array2[] =  $s2['SL_ID'];
    }
        if($dw == 6){
        $q = mysql_query("SELECT SL_ID FROM SLOTS ORDER BY SL_ID DESC LIMIT 4");
        $array = array();
        while ($s = mysql_fetch_array($q)) {
        $array[] = $s['SL_ID'];}
        $array_res_merge = array_merge((array)$array1,(array)$array);
        $arr_res = array_diff($array2, $array_res_merge);
        }elseif($dw != 6){
        //remove bookings from all slots
        $arr_res = array_diff($array2, $array1);
        }
    echo '<div>';
    //make selectable options of results
    echo '<SELECT id="timeslots">';
    foreach($arr_res as $op){
    $r = mysql_query("SELECT SL_TIME FROM SLOTS WHERE SL_ID='$op'");
    $q3 = mysql_fetch_array($r);
    echo "<OPTION value=".$op.">".$q3['SL_TIME']."</OPTION>";
    }
    echo '</SELECT>';
    echo'</div>';
}

?>

この問題に関するヘルプは大歓迎です。

4

1 に答える 1

1

より良い名前を付けて変数の説明を改善すると、コードが読みやすくなることを指摘したいと思います。変数を理解するのに時間がかかるので、ロジックを指摘します...

$my_slots_id = array(1,2,3,4,5,6,7,8,9);
$my_bookings = array(array("id"=>2,"duration"=>2),array("id"=>5,"duration"=>1));
foreach($my_bookings as $booking){
    array_splice($my_slots_id,array_search($booking["id"],$my_slots_id),$booking["duration"]);
}

array_slice を使用して配列から削除します。最初のパラメーターは配列、2 番目のパラメーターは開始キー、3 番目のパラメーターは興味深いものです。離陸する数を定義します。

id から逆方向にアイテムを削除するには、次のようにします。

array_splice($my_slots_id,array_search($booking["id"],$my_slots_id)-$booking["duration"],$booking["duration"]);
于 2012-10-09T14:19:09.910 に答える