gpt4 book ai didi

php - 存储/显示重复周计划的方法

转载 作者:行者123 更新时间:2023-11-29 02:28:47 24 4
gpt4 key购买 nike

我想存储和检索完全不依赖于实际日期的动态每周计划。

数据将存储在这样的 MySQL 表中(不按时间排序):

(Class 和 Instructor 列将存储其他表的引用 ID,但我在这里使用了实际名称,以便于一目了然地阅读)

----------------------------------------------------------------------
| id | time | dayofweek | class | instructor |
----------------------------------------------------------------------
| 1 | 6:30a | 1 | Zumba | Julie |
----------------------------------------------------------------------
| 2 | 9:00a | 3 | Kickbox | Devon |
----------------------------------------------------------------------
| 3 | 11:00a | 4 | Zumba | Alex |
----------------------------------------------------------------------
| 4 | 6:30a | 4 | Dance | Karen |
----------------------------------------------------------------------
| 5 | 5:00p | 1 | R-BAR | Karen |
----------------------------------------------------------------------
| 6 | 5:00p | 6 | Dance | Karen |
----------------------------------------------------------------------
| 7 | 9:00a | 7 | Kinder | Julie |

最终输出看起来像这样(按时间排序):

          ---------------------------------------------------------
| Sun | Mon | Tue | Wed | Thu | Fri | Sat |
-------------------------------------------------------------------
| 6:30a | Zumba | | | Dance | | | |
-------------------------------------------------------------------
| 9:00a | | |Kickbox| | | |Kinder |
-------------------------------------------------------------------
| 11:30a | | | | Zumba | | | |
-------------------------------------------------------------------
| 5:00p | R-BAR | | | | | Dance | |
-------------------------------------------------------------------

但我不知道如何有效地完成这项工作。我今天在 Google 上搜索了几个小时,发现了一些看起来可能有用的帖子,但它从来都不是我要找的东西。

我开始考虑通过函数或其他方式为每个时间段的 7 天中的每一天运行一个单独的查询,但对于这样一个简单的任务来说,这太草率了,而且查询太多了。显然,所有 7 天(列)都会始终显示,但可以随时添加或删除时间段(行),具体取决于当时是否有事件。

接下来,我研究了将所有内容存储在一个数组中并将所有行与重复时间组合在一起,然后逐一处理它们的日期。我不确定如何动态地做到这一点......

我找到了这个例子,我认为它非常接近我需要的: PHP - Merge duplicate array keys in a multidimensional array

总而言之,我打算制作一个简单的管理页面,供用户添加或删除事件。有什么想法吗?

最佳答案

$a=array();

$a[] = array( 'id'=>'1' ,'time'=>'6:30a' , 'dayofweek'=>'2' , 'class'=>'Zumba');
$a[] = array( 'id'=>'2' ,'time'=>'6:40a' , 'dayofweek'=>'3' , 'class'=>'Zumba');
$a[] = array( 'id'=>'2' ,'time'=>'6:20a' , 'dayofweek'=>'3' , 'class'=>'Zumba');
$a[] = array( 'id'=>'2' ,'time'=>'1:20p' , 'dayofweek'=>'3' , 'class'=>'Zumba');

$new_array=array();
foreach($a AS $k =>$v){
if(!array_key_exists($v['time'],$new_array)){
$new_array[$v['time']]=array("","","","","","","","");
unset($new_array[$v['time']][0]);
}

$new_array[$v['time']][$v['dayofweek']]=$v['class'];

}

function cmp($a, $b)
{

$a = preg_replace('{\:}', '', $a);
$a = preg_replace('{a}', '', $a);
$a = preg_replace('{(.*?)p}', '100$1', $a);
$a = (int)$a;
$b = preg_replace('{\:}', '', $b);
$b = preg_replace('{a}', '', $b);
$b = preg_replace('{(.*?)p}', '100$1', $b);
$b = (int)$b;

if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}


uksort($new_array, "cmp");
$weekmap = array( '','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
print_r($new_array);



foreach($new_array AS $k =>$v){
echo $k.'::';
foreach($v AS $k1 =>$v1){
//echo $weekmap[$k1];
//echo '->';
if($v1==''){
echo 'null';
}
echo $v1;
echo '|';
}
echo PHP_EOL;
}

输出

Array
(
[6:20a] => Array
(
[1] =>
[2] =>
[3] => Zumba
[4] =>
[5] =>
[6] =>
[7] =>
)

[6:30a] => Array
(
[1] =>
[2] => Zumba
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
)

[6:40a] => Array
(
[1] =>
[2] =>
[3] => Zumba
[4] =>
[5] =>
[6] =>
[7] =>
)

[1:20p] => Array
(
[1] =>
[2] =>
[3] => Zumba
[4] =>
[5] =>
[6] =>
[7] =>
)

)
6:20a::null|null|Zumba|null|null|null|null|
6:30a::null|Zumba|null|null|null|null|null|
6:40a::null|null|Zumba|null|null|null|null|
1:20p::null|null|Zumba|null|null|null|null|

http://sandbox.onlinephpfunctions.com/code/8da03b1833f58e7f60888cfcfb6e544cd3ff10ad

关于php - 存储/显示重复周计划的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16351033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com