<?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. Android 你可能忽略的提高敲代码效率的方式

    Android 你可能忽略的提高敲代码效率的方式

  2. 【剑指offer】输入一颗二叉树的根节点,求二叉树的深度,C++实现

    原创博文,转载请注明出处! # 题目 # 举例        下图二叉树的深度为4,最长路径为1-2-5-7. # 思路(递归)       如果一个树只有一个节点,它的深度为1: 如果根节点只有左子 ...

  3. Floyd's Cycle Detection Algorithm

    Floyd's Cycle Detection Algorithm http://www.siafoo.net/algorithm/10 改进版: http://www.siafoo.net/algo ...

  4. iOS内存管理(objective-c)

    移动app开发中,由于移动设备内存的限制,内存管理是一个非常重要的话题.objective-c的内存管理,不仅是面试当中老生常谈的一个必问话题,也是日常项目开发中,特别需要重视的环节.对于笔者这种以j ...

  5. erl_0018 erlang_看门狗001_“内存大量占用检测及解决办法”

    绪:erlang出现问题百分之六七十在于内存问题,“进程消息队列爆炸”.“进程堆栈持续增长” 工具:erlang:memory(),erlang:system_info(process_count). ...

  6. 如何组织一个同时面向 UWP/WPF/.Net Core 控制台的 C# 项目解决方案

    希望写一个小型工具,给自己和需要的人.考虑到代码尽可能的复用,我准备采用 .Net Standard 来编写大多数核心代码,并基于 .Net Core 编写跨平台控制台入口,用 WPF 编写桌面端 U ...

  7. ios 视图切换翻页效果

    本文写的是视图切换,涉及到的内容有 1.实现代码添加Navigation Bar  Toolbal: 2.实现在Navigation Bar和Toolbar上用代码添加Bar Button Item: ...

  8. 在Eclipse中导入dtd和xsd文件,使XML自动提示

    DTD 类型约束文件    1. Window->Preferences->XML->XML Catalog->User Specified Entries窗口中,选择Add ...

  9. ballerina 学习十 streams

    ballerina 的streams 使用的是siddhi complex event processing 引擎处理,可以包含的语法有 projection filtering windows jo ...

  10. I/O复用——select和poll

    概述 I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写 ...