栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

php 实现简单的任务分配系统

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

php 实现简单的任务分配系统

//

 

// 第一步:1.1 代码化 家庭成员 初始化 单独定义

$father     = "爸爸";

$mother     = "妈妈";

$brother    = "哥哥";

$sister     = "姐姐";

$myself     = "小白";

// 第一步:1.2 组合家庭成员为数组,成为一个整体,方便编程操作

$family = array(

   $father,

   $mother,

   $brother,

   $sister,

   $myself

);

//第二步:2.1 代码化 任务 初始化 单独任务

$mission1 = "拖地";// 每天一次。

$mission2 = "洗碗";// 每天两次。

$mission3 = "买菜";// 只能父母去买。

//第二步:2.2 组合成为任务组合 成为一个整体,方便任务操作

$missions = array(

   $mission1,

   $mission2,

   $mission3

);

 

function setTimes($missions){

   $missionsTmp = [];

   foreach($missions as $v){

      switch($v){

         case "洗碗";

            $missionsTmp[] = ['time'=>2,'name'=>$v];

            break;

         default:

            $missionsTmp[] = ['time'=>1,'name'=>$v];

            break;

      }

   }

   return $missionsTmp;

}

$missions = setTimes($missions);// 执行函数 获取新的任务数组

 

function getNewMissions($missions){

   $Temp = [];

   foreach($missions as $k => $v){

      $Temp = array_merge($Temp,array_pad([$v['name']],$v['time'],$v['name']));

   }

   return $Temp;

}

$missions = getNewMissions($missions);

 

function setLevel($family,$missions){

   // 设置成员级别

   $levelParent = 10;

   $levelOther = 1;

   // 设置任务需要级别

   $levelMissionEasy = 1;

   $levelMissionHard = 8;

   // 遍历家庭成员

   foreach($family as $k_f => $v_f){

      $defaultLevel = $levelOther;

      switch($v_f){// switch 方式 获取 设置的等级值

         case "爸爸":

            $defaultLevel = $levelParent;

            break;

         case "妈妈":

            $defaultLevel = $levelParent;

            break;

      }

      $family[$k_f] = ['personName'=>$v_f,'personLevel'=>$defaultLevel];// 设置新数据

   }

   // 遍历任务

   foreach($missions as $k_m => $v_m){

      $defaultMissionLevel = $levelMissionEasy;// 设置默认级别

      // if else 方式

      if($v_m == "买菜"){

         $defaultMissionLevel = $levelMissionHard;

      }

      $missions[$k_m] = ['missionName'=>$v_m,'missionLevel'=>$defaultMissionLevel];// 设置新数据

   }

   return ['family'=>$family,'mission'=>$missions];// 返回数据

}

$data = setLevel($family,$missions);

// 截至到目前位置,全部的“人员”跟“任务”的准备工作都完成了

// 接下来的需要执行的就是,按照一周7天,进行任务分配了。

 

function makeMission(array $data){

   // 初始化数据

   $missionTable = [];// 任务排表

   $family = $data['family'];// 家庭成员

   $mission = $data['mission'];// 任务清单

   // 因为会根据每人每周的执行任务的次数,在这个次数里面选择最少的,所以需要初始化成员执行任务的次数。

   foreach($family as $k => $v){

      $v['personTimes'] = 0;

      $family[$k] = $v;

   }

   // 如果计划安排 7天的工作任务 执行 7天循环

   for($i = 1; $i <= 7; $i++){

      // 打印提示字符串

      echo "********************************************************
";

      echo "选择进行分配第{$i}天任务:
";

      echo "********************************************************
";

      $temp = [];// 初始化 返回结果 数组

      foreach($mission as $k => $v){// 循环保证到每个任务都可以分配到人

         // 打印提示字符串

         echo "####################任务分配开始######################
";

         echo "--进行第《{$i}》天第《".($k+1)."》个任务《{$v['missionName']}》任务分配:
";

         // 获取最适合的人选,通过分步获取适合候选人,及最小任务的人的方式实现。

         $tmp = array(

            'missionName' => $v['missionName'],

            'personName'  => getFamilyName($family,$v)

         );

         // 对被选中的人,执行操作任务累加操作

         foreach($family as $k_f => $v_f ){

            if($v_f['personName']==$tmp['personName']){

               $family[$k_f]['personTimes']++;

            }

         }

         $temp[] = $tmp;// 任务分配完成,存入临时数据仓库,代表一个任务分配完成。

         // 打印提示字符串

         echo "任务分配给了{$tmp['personName']}
";

         echo "####################任务分配结束######################
";

         echo "

";

      }

      $missionTable[] = $temp;// 代表一天的任务分配完成。

   }// 代表一周的任务分配完成。

   return $missionTable;// 返回数据

}

 

function getFamilyName($family,$mission){

   $tmp = [];// 符合任务标准的人的存储仓库

   foreach($family as $k => $v){

      if($v['personLevel'] >= $mission['missionLevel']){

         $tmp[] = $v;

      }

   }

   // 将适合的人按照执行任务从小到大的次数进行排序

   $person = null;//初始化 排序列表

   $person = oderBy($tmp);

   return $person[0]['personName'];// 返回最小任务执行次数的人的名字

}

 

function oderBy($family){

   $sort = array(

      'direction' => 'SORT_ASC', //排序顺序标志 SORT_DESC 降序;SORT_ASC 升序

      'field'     => 'personTimes',//排序字段

   );// 存储 选项

   $arrSort = array();

   foreach($family AS $uniqid => $row){// 调整 排序字符串

      foreach($row AS $key=>$value){

         $arrSort[$key][$uniqid] = $value;

      }

   }

   if($sort['direction']){// 如果具有排序规则

      array_multisort($arrSort[$sort['field']], constant($sort['direction']), $family);

   }// 执行排序处理

   return $family;

}

// 格式化显示最终结果

echo "

";

var_dump(makeMission($data));

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/227473.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号