将(递归?)函数创建为;迭代;通过PHP中的数组对象

将(递归?)函数创建为;迭代;通过PHP中的数组对象,php,arrays,Php,Arrays,我想为我的工作创建一个日程安排器。我有一份同事名单和一份工作岗位/任务/任务清单。没有人应该被分配相同的任务,比如说,每个月超过4天,我们应该有一些混合,这样就不会有相同的人一直在一起工作 我通过与员工一起洗牌阵列实现了后者。我遇到了以下逻辑问题:当我将一名员工与工作分配和数据库中的历史记录进行比较时,我的脚本尝试在比较两个数组(一个与员工,另一个与工作分配)后分配每个员工,如果一名员工已完成了特定的工作分配,那么它将跳转到下一个。如果所有其他员工都这样做了,那么我会执行其他代码。问题是,如果一

我想为我的工作创建一个日程安排器。我有一份同事名单和一份工作岗位/任务/任务清单。没有人应该被分配相同的任务,比如说,每个月超过4天,我们应该有一些混合,这样就不会有相同的人一直在一起工作

我通过与员工一起洗牌阵列实现了后者。我遇到了以下逻辑问题:当我将一名员工与工作分配和数据库中的历史记录进行比较时,我的脚本尝试在比较两个数组(一个与员工,另一个与工作分配)后分配每个员工,如果一名员工已完成了特定的工作分配,那么它将跳转到下一个。如果所有其他员工都这样做了,那么我会执行其他代码。问题是,如果一名员工已经被分配,但同时列表中的下一个任务只对他可用,那么我就找不到一个聪明的方法来重新分配/改革/重新安排这些位置

以下是我到目前为止编写的代码:

function check_employee($shuffled_names,$positions,$conn)
{
for($i=0;$i<count($shuffled_names);$i++)
{
    if(comparison($shuffled_names[$i],$positions[0],$conn))
    {           
        $temp_names[] = $shuffled_names[$i]; 
        $temp_positions[] = $positions[0];
        if($positions[0] != "GMP")
        {
            unset($positions[0]);   
            $positions = array_values($positions);
        }
    }
    else 
    {
        foreach($temp_names as $tnames)
        {
            if(comparison($tnames,$positions[0],$conn))
            {
                $temp_names[] = $tnames;
                unset($tnames); 
                echo "tnames: ",$tnames;
                $temp_positions[] = $positions[0];
                break;
            }
        }
    }
}   
//print_r($temp_positions);
for($i=0;$i<count($temp_names);$i++)
    $sql[] = "INSERT INTO schedules(date,name,position) VALUES (CURDATE(),'$temp_names[$i]','$temp_positions[$i]')";
foreach($sql as $query)
        $conn->query($query);
return [$temp_names,$temp_positions];
}
功能检查\u员工($shuffled\u姓名,$positions,$conn)
{
对于($i=0;$i)