首页 > 解决方案 > php算法中的意外输出

问题描述

我正在尝试创建一个页面,我可以在其中选择与某人约会的时间。

在我的数据库中,我今天已经有 3 个日期,如下所示:

在 9:00、10:00 和 12:00,因此这些时间不应出现在页面中。

但我所拥有的是:

9:30:00 9:30:00 10:00:00 10:30:00 11:00:00 11:00:00 11:00:00 11:30:00 11:30:00 11:30:00 12:00:00 12:00:00 14:00:00 14:00:00 14:00:00 ...

我认为有一个算法问题,但我不知道有代码:

<?php
/**
 * Template Name: calendrier
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly.
}
//

get_header(); ?>

    <div id="primary" <?php generate_do_element_classes( 'content' ); ?>>
        <main id="main" <?php generate_do_element_classes( 'main' ); ?>>

            <?php
                do_action( 'generate_before_main_content' );
                if(!isset($_GET['mydate'])){
                    $today=getdate();
                    $_GET['mydate']=$today['year']."-".$today['mon']."-".$today['mday'];
                }
                echo "<p>Entrez une date :</br><form action=\"\" method=\"get\"><input type=\"hidden\" name=\"page_id\" value=\"21\"><input type=\"hidden\" name=\"myuser\" value=\"".$_GET['myuser']."\" ><input type=\"hidden\" name=\"myform\" value=\"".$_GET['myform']."\"><input type=\"date\" name=\"mydate\" /></p><input type=\"submit\" value=\"Modifier la date\" /></form>";

                $mydata = $wpdb->get_results(
                    $wpdb->prepare("
                        SELECT *
                        FROM cal
                        WHERE user_id = %s
                        AND date = %s
                    ",
                    $_GET['myuser'],
                    $_GET['mydate']
                    )
                );
                $disp = $wpdb->get_results(
                    $wpdb->prepare("
                        SELECT * from disponibility where user_id = %s and date = %s
                    ",
                    $_GET['myuser'],
                    $_GET['mydate']
                    )
                );
                $cat = $wpdb->get_row(
                    $wpdb->prepare("
                        SELECT * from cat where id = %s
                    ",
                    $_GET['myform']
                    )
                );
                echo "<h1>Calendrier ".$_GET['mydate']."</h1>";
                foreach($disp as $dispun){
                    $debut = $dispun->start; // start hour
                    $fin = $dispun->end; // end hour
                    $debut_parts = explode(":", $debut);
                    $fin_parts = explode(":", $fin);
                    $debut_parts[0] = intval($debut_parts[0]); // int start hour
                    $debut_parts[1] = intval($debut_parts[1]); // int start minutes
                    $debut_parts[2] = intval($debut_parts[2]); // int start seconds
                    $fin_parts[0] = intval($fin_parts[0]); // int end hour
                    $fin_parts[1] = intval($fin_parts[1]); // ...
                    $fin_parts[2] = intval($fin_parts[2]);

                    while($debut_parts[0] < $fin_parts[0] || ($debut_parts[0] == $fin_parts[0] && $debut_parts[1] < $fin_parts[1]) ){ // foreach half hour
                            if($mydata != null){ // if there is already an date recorded
                                foreach($mydata as $mydataun){ // foreach recorded date
                                    $itime = $mydataun->time;
                                    $jtime = explode(":", $itime);
                                    $jtime[0] = intval($jtime[0]);
                                    $jtime[1] = intval($jtime[1]);
                                    $jtime[2] = intval($jtime[2]);
                                    if(strval($jtime[0]).":".strval($jtime[1]).":".strval($jtime[2]) == strval($debut_parts[0]).":".strval($debut_parts[1]).":".strval($debut_parts[2])){
                                        if($debut_parts[1]== 0 && $mydataun->duration == 1){
                                            $debut_parts[1]+=30;
                                        }elseif($mydataun->duration == 1){
                                            $debut_parts[0]+=1;
                                            $debut_parts[1]=0;
                                        }
                                    }else{
                                        echo "<a href=\"https://someaddress/?page_id=24&mydate=".$_GET['mydate']."&myuser=".$_GET['myuser']."&myform=".$_GET['myform']."&mytime=".strval($debut_parts[0]).":";
                                        if($debut_parts[1]==0){
                                            echo  "00:00";
                                        }else{
                                            echo "30:00";
                                        }
                                        echo "\">".$debut_parts[0].":";
                                        if($debut_parts[1]==0){
                                            echo "00:00";
                                        }else{
                                            echo "30:00";
                                        }
                                        echo "</a></br>";
                                    }
                                }
                            }else{
                                echo "<a href=\"https://someaddress/?page_id=24&mydate=".$_GET['mydate']."&myuser=".$_GET['myuser']."&myform=".$_GET['myform']."&mytime=".strval($debut_parts[0]).":";
                                        if($debut_parts[1]==0){
                                            echo  "00:00";
                                        }else{
                                            echo "30:00";
                                        }
                                        echo "\">".$debut_parts[0].":";
                                        if($debut_parts[1]==0){
                                            echo "00:00";
                                        }else{
                                            echo "30:00";
                                        }
                                        echo "</a></br>";
                            }
                                if($debut_parts[1]== 0){
                                    $debut_parts[1]+=30;
                                }else{
                                    $debut_parts[0]+=1;
                                    $debut_parts[1]=0;
                                }
                        }
                    }

                do_action( 'generate_after_main_content' );
            ?>
        </main><!-- #main -->
    </div><!-- #primary -->

    <?php
    /**
     * generate_after_primary_content_area hook.
     *
     * @since 2.0
     */
    do_action( 'generate_after_primary_content_area' );

    generate_construct_sidebars();

get_footer();

标签: php

解决方案


echo "<a href=\"https://someaddress/?page_id=24&mydate=".$_GET['mydate']."&myuser=".$_GET['myuser']."&myform=".$_GET['myform']."&mytime=".strval($debut_parts[0]).":";
                                        if($debut_parts[1]==0){
                                            echo  "00:00";
                                        }else{
                                            echo "30:00";
                                        }
                                        echo "\">".$debut_parts[0].":";
                                        if($debut_parts[1]==0){
                                            echo "00:00";
                                        }else{
                                            echo "30:00";
                                        }
                                        echo "</a></br>";

必须在while循环的末尾


推荐阅读