Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中,是否有更好的方法按星期几对日期数组进行排序和显示?_Php_Arrays_Sorting - Fatal编程技术网

在php中,是否有更好的方法按星期几对日期数组进行排序和显示?

在php中,是否有更好的方法按星期几对日期数组进行排序和显示?,php,arrays,sorting,Php,Arrays,Sorting,我目前有一个简单的日程安排系统,用户可以从20个不同的时间段中选择预约。我想更新它,使其外观和功能更好,因为它在当前的形式下非常简单。我的想法是采用当前迭代,使约会的一周中的几天根据一系列可用约会中的数据动态更新,这些可用约会中有20多个,但我只显示了20个 我的问题是,我已经花了一些时间在这方面,我开始意识到我正在为可能以更简单的方式完成的事情编写大量代码。现在,我编写的代码查看数组的当前位置,因为索引0可能没有任何内容,因为它不是可用的时间段,然后循环查找第二天要显示的内容。这是可行的,但我

我目前有一个简单的日程安排系统,用户可以从20个不同的时间段中选择预约。我想更新它,使其外观和功能更好,因为它在当前的形式下非常简单。我的想法是采用当前迭代,使约会的一周中的几天根据一系列可用约会中的数据动态更新,这些可用约会中有20多个,但我只显示了20个

我的问题是,我已经花了一些时间在这方面,我开始意识到我正在为可能以更简单的方式完成的事情编写大量代码。现在,我编写的代码查看数组的当前位置,因为索引0可能没有任何内容,因为它不是可用的时间段,然后循环查找第二天要显示的内容。这是可行的,但我不确定如何获取与该日期关联的值

该数组保存的日期/时间如下所示: 2020-07-27 17:00:00

请参阅我的前后截图,了解我要做的事情,以获得更多澄清:

之前:

之后:

所以我试着把它从两列中取出来,在这两列中,日期是按降序排列的,它以一种更吸引人、更容易阅读的方式显示可用的时间段和所有的日子

任何帮助都将不胜感激

代码:


不确定这是否是您正在寻找的,但您可以将第一个数组映射到一个关联数组中,该数组的键为day,值为available hours的另一个数组

要实现这一点,您可以执行以下操作:

$program_final = ['2020-07-27 17:00:00', '2020-07-27 18:00:00'];
$dates = [];
/**
 * Transforms from the ['2020-07-27 17:00:00', '2020-07-27 18:00:00', ...] format to 
 * the ['2020-07-27' => ['17:00:00', '18:00:00', '20:00:00'], '2020-07-29' => ['19:00:00']]
 */
foreach ($program_final as $value) {
    [$date, $hour] = explode(" ", $value);
    if (!isset($dates[$date])) {
        $dates[$date] = [];
    }

    $dates[$date][] = $hour;
}

foreach ($dates as $date => $hours) {
    print_r(date("l", strtotime($date)));     
    foreach($hours as $hour) {
        $date_val = strtotime($date . ' ' . $hour);

        echo '<div class="large-6 cell">';                                                                                             
            echo '<div class="grid-x align-center grid-padding-x align-middle">';                                                                                                     
                echo '<div class="auto shrink cell">';                                                                                                     
                    echo '<input name="apptime" value="' . date("Y-m-d H:i:s", $date_val) . '"  type="radio" required>';                                                                                         
                echo '</div>';                                                                                            
                echo '<div class="auto cell">';                                                                                            
                    echo '<p style="text-transform: uppercase;">'. date("M j Y, g:i A", $date_val) .'</p>';                                                                                  
                echo '</div>';                                                                                         
            echo '</div>';
        echo '</div>';
    }                                                  
};
这样,在第一个for循环中,您可以输出当天,在第二个或内部循环中,您可以获得当天的所有可用小时。 如果需要将它放在单独的元素中,则需要运行两个单独的循环,一个用于在选项卡中输出天,另一个用于在下面的部分中输出小时

编辑: 较旧的PHP版本兼容代码:

<?php

$program_final = ['2020-07-27 17:00:00', '2020-07-27 18:00:00'];
$dates = [];
/**
 * Transforms from the ['2020-07-27 17:00:00', '2020-07-27 18:00:00', ...] format to 
 * the ['2020-07-27' => ['17:00:00', '18:00:00', '20:00:00'], '2020-07-29' => ['19:00:00']]
 */
foreach ($program_final as $value) {
    $splitted = explode(" ", $value);
    $date = $splitted[0];
    $hour = $splitted[1];

    if (!isset($dates[$date])) {
        $dates[$date] = [];
    }

    $dates[$date][] = $hour;
}

foreach ($dates as $date => $hours) {
    print_r(date("l", strtotime($date)));     
    foreach($hours as $hour) {
        $date_val = strtotime($date . ' ' . $hour);

        echo '<div class="large-6 cell">';                                                                                             
            echo '<div class="grid-x align-center grid-padding-x align-middle">';                                                                                                     
                echo '<div class="auto shrink cell">';                                                                                                     
                    echo '<input name="apptime" value="' . date("Y-m-d H:i:s", $date_val) . '"  type="radio" required>';                                                                                         
                echo '</div>';                                                                                            
                echo '<div class="auto cell">';                                                                                            
                    echo '<p style="text-transform: uppercase;">'. date("M j Y, g:i A", $date_val) .'</p>';                                                                                  
                echo '</div>';                                                                                         
            echo '</div>';
        echo '</div>';
    }                                                  
};

这可能正是我所需要的,我不知道如何将阵列分解成碎片。我要试一试!似乎出于某种原因,第一个foreach导致页面无法加载,从我有限的PHP经验来看,我还没有发现它有任何问题。你知道为什么它不能加载吗@亚历山大Pavlov@Omega636确保$program_final已定义且可用。另外,请提供您正在使用的PHP版本。我目前无法访问我的服务器来检查PHP版本是什么$program_final已定义并可访问,看起来问题在于[$date,$hour]=explode,$value;我不确定它是否应该是=或==,但我确实将其更改为==并且页面现在加载@Aleksandar Pavlova php版本是7.0
<?php

$program_final = ['2020-07-27 17:00:00', '2020-07-27 18:00:00'];
$dates = [];
/**
 * Transforms from the ['2020-07-27 17:00:00', '2020-07-27 18:00:00', ...] format to 
 * the ['2020-07-27' => ['17:00:00', '18:00:00', '20:00:00'], '2020-07-29' => ['19:00:00']]
 */
foreach ($program_final as $value) {
    $splitted = explode(" ", $value);
    $date = $splitted[0];
    $hour = $splitted[1];

    if (!isset($dates[$date])) {
        $dates[$date] = [];
    }

    $dates[$date][] = $hour;
}

foreach ($dates as $date => $hours) {
    print_r(date("l", strtotime($date)));     
    foreach($hours as $hour) {
        $date_val = strtotime($date . ' ' . $hour);

        echo '<div class="large-6 cell">';                                                                                             
            echo '<div class="grid-x align-center grid-padding-x align-middle">';                                                                                                     
                echo '<div class="auto shrink cell">';                                                                                                     
                    echo '<input name="apptime" value="' . date("Y-m-d H:i:s", $date_val) . '"  type="radio" required>';                                                                                         
                echo '</div>';                                                                                            
                echo '<div class="auto cell">';                                                                                            
                    echo '<p style="text-transform: uppercase;">'. date("M j Y, g:i A", $date_val) .'</p>';                                                                                  
                echo '</div>';                                                                                         
            echo '</div>';
        echo '</div>';
    }                                                  
};