<?php
header("Content-type:text/html;charset=utf8");
//当前日期
$now = time();
//作为程序是否执行的依据
$flag = TRUE;
//返回数组key
function getKeys($department) {
$arrayitm = explode('|', $department);
$str ='';
foreach($arrayitm as $k => $v){
//判断当前位置
if(strstr($v, '1')){
$str .= $k;
}else{
$str .= '#';
}
}
//正则取数字
$result=preg_match_all('/\d+/',$str,$arr);
//print_r($arr);
if(!empty($arr[0])){
return $arr[0][0];
}else{
//默认
return '-1';
}
}
//读取log日志
$file_log ='datelog.txt';
$logs = file_get_contents($file_log);
$datetime = date('Y-m-d', $now);
//$datetime = "2017-03-31"; //测试
//var_dump($logs);
//节假日列表
$exception = array(
'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',
'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'
);
//调休列表
$leaves = array(
// '2017-03-20','2017-03-21'
);
//echo date('Y-m-d', $starttime).'<br/>';
//$now = strtotime('2017-03-31'); //测试
$weekday = date('N', $now);//得到星期值:1-7 排除 周6 周天 6和7
//$weekday =6;
if(in_array($datetime, $exception)){
//法定节假日
$flag = false;
}elseif(in_array($datetime, $leaves)){
//调休
$flag = false;
}else{
if(empty($logs)){
//写入当前时间 判断周末 或者节假日
$result_date = file_put_contents($file_log, $datetime, LOCK_EX);
}else{
//读取内容 作判断
$logs_new = file_get_contents($file_log);
$arr = explode('|', $logs_new);
if(in_array($datetime, $arr)){
//作为程序是否执行的依据
$flag = false;
}else{
$flag = true;
//追加内容
$result_date = file_put_contents($file_log, '|'.$datetime, FILE_APPEND|LOCK_EX);
}
}
} $file_dep ='department.txt'; //内容,0|内容2,0|.....
$file_lea ='leader.txt'; //同上
$department = file_get_contents($file_dep);
//将数据分割
$arritem = explode('|', $department);
//print_r($arritem);
$length = count($arritem); //获取当前内容下标
$keys = getKeys($department);
//var_dump($flag);
if($flag){
if($keys == '-1'){
//默认时
$replace = str_replace('0', '1', $arritem[0]);
$arritem[0] = $replace;
}else{
$keys = intval($keys);
if($keys == $length -1){
//echo 'ok';
//到数组末端 重0开始
$replace = str_replace('0', '1', $arritem[0]);
$arritem[0] = $replace; $arritem[$keys] = str_replace('1', '0', $arritem[$keys]);
}else{
//echo 'ak1='.$arritem[$keys];
//清空前一个数据
$arritem[$keys] = str_replace('1', '0', $arritem[$keys]);
//更改 数组坐标 +1 的值
$zuo = $keys+1;
$replace = str_replace('0', '1', $arritem[$zuo]);
$arritem[$zuo] = $replace;
}
}
if(!empty($arritem)){
//将修改后的数据转成字符串存入txt
$write=implode('|',$arritem);
//echo $write;exit;
$result = file_put_contents($file_dep, $write, LOCK_EX);
if($result){
//echo '写入文件成功';
}
}
} /***************************************************************************************/
$leader = file_get_contents($file_lea);
//将数据分割
$arritem_lea = explode('|', $leader);
$length_lea = count($arritem_lea); //获取当前内容下标
$keys_lea = getKeys($leader);
//var_dump($flag);
if($flag){
if($keys_lea == '-1'){
//默认时
$replace = str_replace('0', '1', $arritem_lea[0]);
$arritem_lea[0] = $replace;
}else{
$keys_lea = intval($keys_lea);
if($keys_lea == $length_lea -1){
//到数组末端 重0开始
$replace = str_replace('0', '1', $arritem_lea[0]);
$arritem_lea[0] = $replace; $arritem_lea[$keys_lea] = str_replace('1', '0', $arritem_lea[$keys_lea]);
}else{
//清空前一个数据
$arritem_lea[$keys_lea] = str_replace('1', '0', $arritem_lea[$keys_lea]);
//更改 数组坐标 +1 的值
$zuo = $keys_lea+1;
$replace = str_replace('0', '1', $arritem_lea[$zuo]);
$arritem_lea[$zuo] = $replace;
}
}
if(!empty($arritem_lea)){
//将修改后的数据转成字符串存入txt
$write_lea=implode('|',$arritem_lea);
//echo $write;exit;
$result_lea = file_put_contents($file_lea, $write_lea, LOCK_EX);
if($result_lea){
//echo '写入文件成功';
}
}
}
//输出结果
if($department && $leader){
// echo 'keys='.$keys;
// echo "<br/>";
// echo 'keys_lea='.$keys_lea;
// echo "<br/>";
//echo $length;
if($keys == '-1'){
$k = 0;
}elseif($keys >= 0 ){
if(intval($keys) == $length - 1){
if($flag){
$k = 0;
}else{
$k = $keys;
}
}else{
if($flag){
$k = $keys+1;
}else{
$k = $keys;
}
}
} if($keys_lea == '-1'){
$k_lea = 0;
}elseif($keys_lea >= 0 ){
if(intval($keys_lea) == $length_lea - 1){
if($flag){
$k_lea = 0;
}else{
$k_lea = $keys_lea;
}
}else{
if($flag){
$k_lea = $keys_lea+1;
}else{
$k_lea = $keys_lea;
}
}
} // echo 'k='.$k;
// echo "<br/>";
// echo 'k_lea='.$k_lea;
// echo "<br/>";
// echo 'length='.$length;
//echo '<br/>';
//echo $weekday.'<br/>';
if (in_array($datetime, $exception)) {
echo '节假日轮休';
exit;
}elseif(in_array($datetime, $leaves)){
echo '调休';
exit;
}else{
$str1 = explode(',', $arritem[$k])[0];
$str2 = explode(',', $arritem_lea[$k_lea])[0];
echo $datetime.'<br/>';
echo '值班单位:'.$str1.'<br/>';
echo '值班领导:'.$str2;
}
}
exit;

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

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

自己个儿写的循环分配txt中的内容的更多相关文章

  1. ThinkPhp循环出数据库中的内容并输出到模板

    <foreach name='user' item='v'> //循环出数据库中的内容 对应控制器->方法中的  $this->assign('user',M('user')- ...

  2. DOS 循环读取txt每一行内容

    在命令行窗口中输入: for /f %i in (f:\mydata.txt) do echo %i 如果要是写成批处理文件run.bat for /f %%i in (f:\mydata.txt) ...

  3. vue如何循环渲染element-ui中table内容

    对于大多数前端开发者来说,vuejs+element-ui是开发后台管理系统过程中必不可少的技术框架.而后台管理系统中,最常见的形式就是表格和表单,以便用来增删改查. element-ui中table ...

  4. js中return false; jquery中需要这样写:return false(); Jquery 中循环 each的用法 for循环

    js中return false; jquery中需要这样写:return false(); Jquery 中循环 each的用法 $(".progressName").each(f ...

  5. 向txt文件中写入内容(覆盖重写与在末尾续写+FileOutputStream与FileWriter)(转发:https://blog.csdn.net/bestcxx/article/details/51381460)

    !!!! 读取txt文件中的内容 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; /** ...

  6. C# 简单的往txt中写日志,调试时很有用

    原文 http://blog.csdn.net/hejialin666/article/details/6106648 有些程序在调试时很难抓住断点(如服务程序),有些程序需要循环无数次,要看每一次或 ...

  7. NOPI读xls文件写到txt中(NPOI系列二)

    private void button2_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); //找 ...

  8. 用python对txt中文件读取,然后按顺序标号存入excel中

    读取txt文件,然后存入excel中 import xlwt #从txt文件中读取内容,放到ftext1中 f1=open('/Users/XXX/Documents/pythonwork/tenso ...

  9. java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

随机推荐

  1. Shell 命令行,实现一个获取任意位数的随机密码的脚本

    Shell 命令行,实现一个获取任意位数的随机密码的脚本 每次我们想要获得一个密码的时候都很头疼,于是我之前自己用nodejs写了一个 Shell 脚本.这两天在学习 bash Shell 所以,想用 ...

  2. Kotlin Reference (七) Returns and Jumps

    most from reference kotlin有三个结构跳跃表达式 return 默认情况下,从最近的封闭函数或匿名函数返回. break 跳出整个循环 continue 跳出本次循环,进行下一 ...

  3. 使用kibana来进行ElasticSearch的信息查询检索

    大家经常会听到使用ELK搭建日志管理平台.完成日志聚合检索的功能,那么这个平台到底是个什么概念,怎么搭建,怎么使用呢? ELK包括ElasticSearch(数据存储.快速查询).logstash(日 ...

  4. ss-libev 源码解析udp篇 (1)

    shadowsocks-libev udp转发原理简介 ss_local作为一个sock5服务器,接收来自socks5客户端的数据包.在ss_local启动后,即创建一个udp socket,并bin ...

  5. Ubuntu在图形界面和命令行界面都循环登录解决办法

    在做机器ip变化自动发送邮件的时候,在/etc/profile.d/目录下添加了一个脚本,重启的时候就循环登录了,无论是在图形界面还是命令行界面. 解决方法:利用系统U盘进入系统进行修改,具体如下: ...

  6. objc/runtime.h 相关

    Objecitve-C的重要特性是Runtime(运行时),在Interacting with the Runtime(交互运行)中,运行时函数部分,苹果给出了/usr/lib/libobjc.A.d ...

  7. Vue之拦截与响应拦截

    vue中有一个拦截方法,当我们发起请求或者请求回来的时候,我们需要做一定的数据过滤或者拦截 下面是在开发项目时进行的一个axios的请求封装: 拦截器:就是我们在请求之前进行的一个操作比如说,我们可以 ...

  8. Servlet实现验证码图片(一)

    Servlet实现数字字母验证码图片(一): 生成验证码图片主要用到了一个BufferedImage类,如下:

  9. 实例-系数可配置的fir滤波器

  10. js写的体彩足球预测分析

    最近室友在玩世界杯的预测,我顺手写点分析:下面直接给出代码,很简单的,拷贝代码直接存为html文件就可以了.---------mq0036 说明下:需要你自己去找个Jquery引用到当前页面就可以了 ...