<?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. ScrollView中嵌套ExpandableListView

    为了让SrollView中嵌套ExpandableListView,我们就得改ListView的高度,所以写一个类继承于ExpandableListview: import android.conte ...

  2. 使用TR1的智能指针

    作为C++程序员,在没有智能指针,手动管理内存的蛮荒岁月里,可以说是暗无天日,痛苦异常.直到上帝说,还是要有光,于是智能指针进了标准.C++码农的日子总算好起来了. 虽然一直鄙视着没有显式指针的语言, ...

  3. Win10安装Ubuntu16.04 双系统

    Tips: 双系统Ubuntu可以使用机器的GPU硬件,虚拟机不可以 压缩卷留的空间尽量大一点,不要相信50G够用 选UEFI,并关闭 Secure Boot,不要选 Legacy 选UEFI,就要在 ...

  4. BZOJ5450: 轰炸(水题,Tarjan缩点求最长路)

    5450: 轰炸 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 43  Solved:18[Submit][Status][Discuss] Desc ...

  5. 利用ajax完成项目图册上传删除【实际项目】

    [项目页面效果] [前台jsp页面] jsp的js代码 <script type="text/javascript"> //上传项目图片 function upload ...

  6. LOJ2611. NOIP2013 积木大赛 【线段树】

    LOJ2611. NOIP2013 积木大赛 LINK 题目大意是给你一个目标状态数组 每次你可以选择一个连续区间加上一个值,求最小操作次数 我是神奇的脑子 最近做数据结构疯了 然后看见这题就数据结构 ...

  7. JS 区分单击双击

    var timeout =null; $("#Btn").on("click",function(){ clearTimeout(timeout);//停止单击 ...

  8. .NET Core 和 .NET Framework 中的 MEF2

    MEF,Managed Extensibility Framework,现在已经发布了三个版本了,它们是 MEF 和 MEF2. 等等!3 去哪儿了?本文将教大家完成基于 MEF2 的开发.   ME ...

  9. springboot 填坑一 springboot java.sql.SQLException: Access denied for user ''@'localhost' (using password: NO)

    这里有个很不明显的错误  初次搭建很容易犯这个错

  10. SQL Server 2008 R2占用内存越来越大解决方法

    最近开发sql server数据库项目的过程中发现了这么一个问题,后台网站内存占用95%,通过任务管理器查看占内存的进程sqlserver.exe,是因为SQL Server 2008 R2运行越久, ...