安排方法 - php

我正在为一家家庭护理公司开发PHP应用程序。他们有x数量的护理人员,这些护理人员每周计划去x数量的服务用户(客户)的房屋。每个服务用户都有一组何时访问他们的“时间表”,其中包括时间段以及以分钟为单位的访问持续时间。

因此,例如,服务用户可以具有以下时间表。

      AM   Lunch   Tea   Late   Night   Respite
Mon   30m  -       30m   60m    -       -
Tue   30m  -       -     60m    -       -
Wed   20m  25m     30m   60m    120m    -
Thu   -    -       30m   -      -       -
Fri   30m  25m     -     -      -       -
Sat   -    -       -     -      -       -
Sun   20m  25m     -     -      -       -

这些时间段当前以以下格式存储在数据库中:

Table: Service_user_schedules
id   service_user_id   day   period   duration

护理人员每周都会填写一张表,列出他们可以工作的时间。然后,将这些数据输入系统,并以以下格式存储在数据库中:

Table: Carer_available_shifts
id   carer_id   day   period

现在的问题是,我需要创建一个控制器,该控制器将获取此数据并根据他们提供的可用性自动将照顾者分配给服务用户。这需要可编辑,以便在没有人可用于特定护理人员的情况下,用户可以选择一个不可用的护理人员,并且仍将其添加到数据库中。

此刻,我有很多循环,函数和回声,以检查特定服务用户是否可以使用护老者并使其可编辑。

有没有人曾经执行过此类任务,如果是,您是否找到了一种简单的方法来完成它。我更希望使它面向对象,以便我可以重用相同的泛型类,但此刻,我完全不知所措!

编辑:我现在已经向这个问题添加了赏金。我目前正在研究遗传算法(这是我什至从未听说过的东西!更不用说使用了!)作为基于一些答案的解决方案。我想知道你们中是否有人使用其他方法来解决此类问题,或者您是否曾使用遗传算法,能否就如何将其应用于特定问题提供一个不太笼统的解释。

我认为这种障碍在许多“职员”类型的应用程序中是相当普遍的,并且令我感到惊讶的是,在网络上任何地方对此进行的讨论都很少!

更新

对于这个特定的项目,我认为我可能最终会使用Tak所描述的数据库方法,但是在将来我有更多的开发时间时可能会转换为使用GA。

我现在对授予赏金的人有些茫然。 duedl0r为他(或她)的答案付出了很多努力。它使我对遗传算法的世界有了深刻的了解-这是我从未遇到过的问题解决方法。但是,Tak提供的答案提供了我将用于此项目的解决方案。因此,我将赏金授予了德。

参考方案

我会这样处理。首先是一个数据库表,该表将日程安排时间链接到可用的看护人...

Table schedules_shifts
id   service_user_schedules_id   carer_available_shifts_id

现在,该功能可以将可用的看护人与所需的时间表槽进行匹配,并填充表格...

* Fetch service_user_schedules for the next week
* For each service_user_schedules row
 * Fetch carer_available_shifts that match the schedule slot
 * For each carer_available_shift row
  * If results
   * Fetch schedules_shifts rows where carer_available_shifts_id is already used
   * If no results
    * Insert a row in the schedules_shifts table for each carer
   * Otherwise carer is busy, do nothing and continue
  * If no results, flag for review or trigger e-mail to manager, or other action
* Trigger e-mail or save log of completion for peace of mind

现在,新表可以与时间表时段进行照顾者匹配,而无需重复分配照顾者的时间。但是,它的确与多个安排时间表的护理人员轮班相匹配。这可能是一个功能!保持原样,并在confirmed上添加schedules_shifts列,以便经理可以手动分配工作,或护理人员可以志愿,或将第一个匹配项自动标记为confirmed,并保留其他行作为备用第一护工不能做到。

这一切都可以由每周的cron触发,或者在最终职业更新其一周的时间表后触发。可能是第一个,因为用户通常是不可预测的。

现在,自动化数据在表格中,您可以将其打开以进行编辑。创建一个普通的管理控制台,就像您要在schedules_shifts中更改行一样,或者将其他行标记为“已确认”。

将其转换为通用类应该不会太困难-只需使用通用术语即可。已经很晚了,我想不起来:)

可以使用PHP数组而不是上面创建的数据库操作进行所有数据筛选,但是我认为SQL更适合于对数据进行排序和修改。

遗传算法听起来很有趣,如果您有时间研究它们,^ _ ^

希望有帮助吗?

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

PHP:将字符串拆分为字母和数字部分的最佳方法 - php

我有几个格式的字符串AA11 AAAAAA1111111 AA1111111 分离字符串的字母和数字部分的最佳方法(最有效)? 参考方案 如果它们都是一系列字母,然后是一系列数字,并且没有非字母数字字符,那么sscanf()可能比regexp更有效$example = 'AAA11111'; list($alpha,$numeric) =…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…