zoukankan      html  css  js  c++  java
  • 自己个儿写的循环分配txt中的内容

      1 <?php
      2 header("Content-type:text/html;charset=utf8");
      3 //当前日期
      4 $now = time();
      5 //作为程序是否执行的依据
      6 $flag = TRUE;
      7 //返回数组key
      8 function getKeys($department) {
      9     $arrayitm = explode('|', $department);
     10     $str ='';
     11     foreach($arrayitm as $k => $v){
     12         //判断当前位置
     13         if(strstr($v, '1')){
     14             $str .= $k;
     15         }else{
     16              $str .= '#';
     17         }
     18     }
     19     //正则取数字
     20     $result=preg_match_all('/d+/',$str,$arr);
     21     //print_r($arr);
     22     if(!empty($arr[0])){
     23         return $arr[0][0];
     24     }else{
     25         //默认
     26         return '-1';
     27     }
     28 }
     29 //读取log日志
     30 $file_log ='datelog.txt';
     31 $logs = file_get_contents($file_log);
     32 $datetime = date('Y-m-d', $now);
     33 //$datetime = "2017-03-31"; //测试
     34 //var_dump($logs);
     35 //节假日列表
     36 $exception = array(
     37    '2017-01-01','2017-01-02','2017-01-27','2017-01-28','2017-01-29','2017-01-30','2017-01-31','2017-02-01','2017-02-02','2017-04-02','2017-04-03','2017-04-04','2017-04-29','2017-04-30','2017-05-01',
     38     '2017-05-28','2017-05-29','2017-05-30','2017-10-01','2017-10-02','2017-10-03','2017-10-04','2017-10-05','2017-10-06','2017-10-07','2017-10-08'
     39 );
     40 //调休列表
     41 $leaves = array(
     42    // '2017-03-20','2017-03-21'
     43 );
     44 //echo date('Y-m-d', $starttime).'<br/>';
     45 //$now = strtotime('2017-03-31'); //测试
     46 $weekday = date('N', $now);//得到星期值:1-7 排除 周6 周天  6和7
     47 //$weekday =6;
     48 if(in_array($datetime, $exception)){
     49        //法定节假日
     50        $flag = false;
     51 }elseif(in_array($datetime, $leaves)){
     52        //调休
     53        $flag = false;
     54 }else{
     55     if(empty($logs)){
     56     //写入当前时间 判断周末 或者节假日
     57         $result_date = file_put_contents($file_log, $datetime, LOCK_EX);
     58     }else{
     59         //读取内容 作判断
     60         $logs_new = file_get_contents($file_log);
     61         $arr = explode('|', $logs_new);
     62         if(in_array($datetime, $arr)){
     63             //作为程序是否执行的依据
     65             $flag = false;
     66         }else{
     68             $flag = true;
     69             //追加内容
     70              $result_date = file_put_contents($file_log, '|'.$datetime, FILE_APPEND|LOCK_EX);
     72         }
     73     }
     74 }
     75 
     83 $file_dep ='department.txt'; //内容,0|内容2,0|.....
     84 $file_lea ='leader.txt';     //同上
     85 $department = file_get_contents($file_dep);
     86 //将数据分割
     87 $arritem = explode('|', $department);
     88 //print_r($arritem);
     89 $length = count($arritem);
     90 
     91  //获取当前内容下标
     92 $keys = getKeys($department);
     93 //var_dump($flag);
     94 if($flag){
     96     if($keys == '-1'){
     97         //默认时
     98         $replace = str_replace('0', '1', $arritem[0]);
     99         $arritem[0] = $replace;
    100     }else{
    101         $keys = intval($keys);
    102         if($keys == $length -1){
    103             //echo 'ok';
    104             //到数组末端 重0开始
    105             $replace = str_replace('0', '1', $arritem[0]);
    106             $arritem[0] = $replace;
    107 
    108             $arritem[$keys] = str_replace('1', '0', $arritem[$keys]);
    109         }else{
    110                //echo 'ak1='.$arritem[$keys];
    111                //清空前一个数据
    112                $arritem[$keys] = str_replace('1', '0', $arritem[$keys]);
    113                //更改 数组坐标 +1 的值
    114                 $zuo = $keys+1;
    115                 $replace = str_replace('0', '1', $arritem[$zuo]);
    116                 $arritem[$zuo] = $replace;
    117         }
    118     }
    119     if(!empty($arritem)){
    120         //将修改后的数据转成字符串存入txt
    121         $write=implode('|',$arritem);
    122         //echo $write;exit;
    123         $result = file_put_contents($file_dep, $write, LOCK_EX);
    124         if($result){
    125             //echo '写入文件成功';
    126         }
    127     }
    128 }
    129 
    130 /***************************************************************************************/
    131 $leader = file_get_contents($file_lea);
    132 //将数据分割
    133 $arritem_lea = explode('|', $leader);
    134 $length_lea = count($arritem_lea);
    135 
    136 //获取当前内容下标
    137 $keys_lea = getKeys($leader);
    138 //var_dump($flag);
    139 if($flag){
    140     if($keys_lea == '-1'){
    141         //默认时
    142         $replace = str_replace('0', '1', $arritem_lea[0]);
    143         $arritem_lea[0] = $replace;
    144     }else{
    145         $keys_lea = intval($keys_lea);
    146         if($keys_lea == $length_lea -1){
    147             //到数组末端 重0开始
    148             $replace = str_replace('0', '1', $arritem_lea[0]);
    149             $arritem_lea[0] = $replace;
    150 
    151             $arritem_lea[$keys_lea] = str_replace('1', '0', $arritem_lea[$keys_lea]);
    152         }else{
    153                //清空前一个数据
    154                $arritem_lea[$keys_lea] = str_replace('1', '0', $arritem_lea[$keys_lea]);
    155                //更改 数组坐标 +1 的值
    156                 $zuo = $keys_lea+1;
    157                 $replace = str_replace('0', '1', $arritem_lea[$zuo]);
    158                 $arritem_lea[$zuo] = $replace;
    159         }
    160     }
    161     if(!empty($arritem_lea)){
    162         //将修改后的数据转成字符串存入txt
    163         $write_lea=implode('|',$arritem_lea);
    164         //echo $write;exit;
    165         $result_lea = file_put_contents($file_lea, $write_lea, LOCK_EX);
    166         if($result_lea){
    167             //echo '写入文件成功';
    168         }
    169     }
    170 }
    171 //输出结果
    172 if($department && $leader){
    173 //    echo 'keys='.$keys;
    174 //    echo "<br/>";
    175 //    echo 'keys_lea='.$keys_lea;
    176 //    echo "<br/>";
    177     //echo $length;
    178     if($keys == '-1'){
    179         $k = 0;
    180     }elseif($keys >= 0 ){
    181         if(intval($keys) == $length - 1){
    182             if($flag){
    183                 $k = 0;
    184             }else{
    185                 $k = $keys;
    186             }
    187         }else{
    188             if($flag){
    189                 $k = $keys+1;
    190             }else{
    191                 $k = $keys;
    192             }
    193         }
    194     }
    195     
    196     if($keys_lea == '-1'){
    197         $k_lea = 0;
    198     }elseif($keys_lea >= 0 ){
    199         if(intval($keys_lea) == $length_lea - 1){
    200             if($flag){
    201                 $k_lea = 0;
    202             }else{
    203                 $k_lea = $keys_lea;
    204             }
    205         }else{
    206             if($flag){
    207                 $k_lea = $keys_lea+1;
    208             }else{
    209                 $k_lea = $keys_lea;
    210             }
    211         }
    212     }
    213     
    214 //   echo 'k='.$k;
    215 //    echo "<br/>";
    216 //    echo 'k_lea='.$k_lea;
    217 //    echo "<br/>";
    218 //    echo 'length='.$length;
    219 //echo '<br/>';
    220 //echo $weekday.'<br/>';
    221     if (in_array($datetime, $exception)) {
    222         echo '节假日轮休';
    223         exit;
    224     }elseif(in_array($datetime, $leaves)){
    225         echo '调休';
    226         exit;
    227     }else{
    228         $str1 = explode(',', $arritem[$k])[0]; 
    229         $str2 = explode(',', $arritem_lea[$k_lea])[0]; 
    230         echo  $datetime.'<br/>';
    231         echo '值班单位:'.$str1.'<br/>';
    232         echo '值班领导:'.$str2;
    233     }
    234 }
    235 exit;

     需求: 按内容顺序循环分配  排除法定节假日  有点类似排班

    原理:没有用数据库  用的txt 默认数据为0 执行程序后 值改为1 作为标识当前内容 获取下标 替换原有内容 在写入文件

  • 相关阅读:
    Codeforces Round #598 (Div. 3)(全)
    Codeforces Round #597 (Div. 2) F
    Codeforces Round #597 (Div. 2) D Shichikuji and Power Grid (MST)
    ACM bitset
    Codeforces Round #592 (Div. 2) E. Minimizing Difference
    Educational Codeforces Round 74 (Rated for Div. 2)D. AB-string
    Educational Codeforces Round 74 (Rated for Div. 2) tandard Free2play
    2018南昌邀请赛网络赛 单调栈 I
    rmq问题
    poj 3259Wormholes
  • 原文地址:https://www.cnblogs.com/lh460795/p/6566386.html
Copyright © 2011-2022 走看看