[李景山php]php 實現簡單的任務分配系統

來源:互聯網
上載者:User

標籤:php   任務分配系統   

<?php/** * Created by PhpStorm. * User: ziniu * Date: 2016/9/21 * Time: 10:58 *////** * 任務描述: *   小白一家有五口人,分別是爸爸、媽媽、哥哥、姐姐, *   每天要執行的家庭任務分別是拖地、洗碗、買菜,其中,洗碗每天要做兩次, *   而買菜又必須是爸爸或者媽媽才能購買! *   小白學習了編程,小白的爸爸要求小白用程式安排一個工作計劃表,盡量做到 *   每個人的任務相對均衡,以周為單位即可! * * 任務分析: * 問題1:對於只能父母執行的任務,如“買菜”,就是類似於層級問題 *       需要給相應的人給提升到相應的層級! * 問題2:對於“洗碗”這樣需要每天執行兩次的任務,我們可以直接複製出來一份 *       就類似於兩個“洗碗”任務,每個任務每天僅執行一次,就可以了。 * 問題3:對於“買菜”類進階任務,需要給任務加上對應執行的層級要求。 * * 特別說明: *      本案例為了能最大化的展示基礎階段的知識點,暫時沒有做代碼及結構最佳化! */// 第一步: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);/** * 說明:因為每個任務每天執行的次數不一樣,所以根據任務的執行次數 *      重新設定任務數組為帶執行次數的二維數組。 * @param $missions * @return array */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);// 執行函數 擷取新的任務數組/** * 說明:根據設定的二維數組中每個對應的任務次數不同,轉換成為不同的 *      一維數組 * @param $missions * @return array */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);/** * 說明:根據任務要求設定對應的任務跟人的執行許可權。 * @param $family * @param $missions * @return array */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天,進行任務分配了。/** * 說明:任務分配主程式,傳入“人員”跟“任務”,返回對應排序結果。 * @param array $data * @return array */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 "********************************************************<br />";      echo "選擇進行分配第{$i}天任務:<br />";      echo "********************************************************<br />";      $temp = [];// 初始化 返回結果 數組      foreach($mission as $k => $v){// 迴圈保證到每個任務都可以分配到人         // 列印提示字串         echo "####################任務分配開始######################<br />";         echo "--進行第《{$i}》天第《".($k+1)."》個任務《{$v[‘missionName‘]}》任務分配:<br />";         // 擷取最適合的人選,通過分步擷取適合候選人,及最小任務的人的方式實現。         $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‘]}<br />";         echo "####################任務分配結束######################<br />";         echo "<br /><br />";      }      $missionTable[] = $temp;// 代表一天的任務分配完成。   }// 代表一周的任務分配完成。   return $missionTable;// 返回資料}/** * 說明:根據任務的層級,選擇可以執行任務的候選人。 * @param $family * @param $mission * @return mixed */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‘];// 返回最小任務執行次數的人的名字}/** * 說明:根據人員名單,找到目前任務最少的那個人。就是多維陣列排序問題 * @param $family * @return mixed */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 "<pre />";var_dump(makeMission($data));


本文出自 “專註php 群號:414194301” 部落格,請務必保留此出處http://jingshanls.blog.51cto.com/3357095/1856896

[李景山php]php 實現簡單的任務分配系統

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.