自己个儿写的循环分配txt中的内容
<?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中的内容的更多相关文章
- ThinkPhp循环出数据库中的内容并输出到模板
<foreach name='user' item='v'> //循环出数据库中的内容 对应控制器->方法中的 $this->assign('user',M('user')- ...
- DOS 循环读取txt每一行内容
在命令行窗口中输入: for /f %i in (f:\mydata.txt) do echo %i 如果要是写成批处理文件run.bat for /f %%i in (f:\mydata.txt) ...
- vue如何循环渲染element-ui中table内容
对于大多数前端开发者来说,vuejs+element-ui是开发后台管理系统过程中必不可少的技术框架.而后台管理系统中,最常见的形式就是表格和表单,以便用来增删改查. element-ui中table ...
- js中return false; jquery中需要这样写:return false(); Jquery 中循环 each的用法 for循环
js中return false; jquery中需要这样写:return false(); Jquery 中循环 each的用法 $(".progressName").each(f ...
- 向txt文件中写入内容(覆盖重写与在末尾续写+FileOutputStream与FileWriter)(转发:https://blog.csdn.net/bestcxx/article/details/51381460)
!!!! 读取txt文件中的内容 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; /** ...
- C# 简单的往txt中写日志,调试时很有用
原文 http://blog.csdn.net/hejialin666/article/details/6106648 有些程序在调试时很难抓住断点(如服务程序),有些程序需要循环无数次,要看每一次或 ...
- NOPI读xls文件写到txt中(NPOI系列二)
private void button2_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); //找 ...
- 用python对txt中文件读取,然后按顺序标号存入excel中
读取txt文件,然后存入excel中 import xlwt #从txt文件中读取内容,放到ftext1中 f1=open('/Users/XXX/Documents/pythonwork/tenso ...
- java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
随机推荐
- Shell 命令行,实现一个获取任意位数的随机密码的脚本
Shell 命令行,实现一个获取任意位数的随机密码的脚本 每次我们想要获得一个密码的时候都很头疼,于是我之前自己用nodejs写了一个 Shell 脚本.这两天在学习 bash Shell 所以,想用 ...
- Kotlin Reference (七) Returns and Jumps
most from reference kotlin有三个结构跳跃表达式 return 默认情况下,从最近的封闭函数或匿名函数返回. break 跳出整个循环 continue 跳出本次循环,进行下一 ...
- 使用kibana来进行ElasticSearch的信息查询检索
大家经常会听到使用ELK搭建日志管理平台.完成日志聚合检索的功能,那么这个平台到底是个什么概念,怎么搭建,怎么使用呢? ELK包括ElasticSearch(数据存储.快速查询).logstash(日 ...
- ss-libev 源码解析udp篇 (1)
shadowsocks-libev udp转发原理简介 ss_local作为一个sock5服务器,接收来自socks5客户端的数据包.在ss_local启动后,即创建一个udp socket,并bin ...
- Ubuntu在图形界面和命令行界面都循环登录解决办法
在做机器ip变化自动发送邮件的时候,在/etc/profile.d/目录下添加了一个脚本,重启的时候就循环登录了,无论是在图形界面还是命令行界面. 解决方法:利用系统U盘进入系统进行修改,具体如下: ...
- objc/runtime.h 相关
Objecitve-C的重要特性是Runtime(运行时),在Interacting with the Runtime(交互运行)中,运行时函数部分,苹果给出了/usr/lib/libobjc.A.d ...
- Vue之拦截与响应拦截
vue中有一个拦截方法,当我们发起请求或者请求回来的时候,我们需要做一定的数据过滤或者拦截 下面是在开发项目时进行的一个axios的请求封装: 拦截器:就是我们在请求之前进行的一个操作比如说,我们可以 ...
- Servlet实现验证码图片(一)
Servlet实现数字字母验证码图片(一): 生成验证码图片主要用到了一个BufferedImage类,如下:
- 实例-系数可配置的fir滤波器
- js写的体彩足球预测分析
最近室友在玩世界杯的预测,我顺手写点分析:下面直接给出代码,很简单的,拷贝代码直接存为html文件就可以了.---------mq0036 说明下:需要你自己去找个Jquery引用到当前页面就可以了 ...