大家好,有点小问题想问问各位大牛。
1:有道很简单的题目是求两个形式类似{2,6,5,8}这样的集合的交集和并集。现在我想问下,在对输入内容进行验证时 如何验证中间的元素没有出现其他字符?比如{2,*T%&,6}这样?
1.1: 我在php手册里的array_intersect函数里的注释段看到有人发表的一个小函数:
function my_array_intersect($a,$b)
{
for($i=0;$i<sizeof($a);$i++)
{
$m[]=$a[$i];
}
for($i=0;$i<sizeof($b);$i++)
{
$m[]=$b[$i];
}
sort($m);
$get=array();
for($i=0;$i<sizeof($m);$i++)
{
if($m[$i]==$m[$i+1])
$get[]=$m[$i];
}
return $get;
}
但是我发现如果我输入的是{2,6,5,8}然后去掉头尾的{}后 用explode拆分到一个数组里运行此函数进行求交集,那么得到的结果是个空集,这个函数只能对类似{a,b,c}这样的集合使用,这是为什么?
2:有个题目是在一个页面上输入日志,然后点击一个按钮提交后生成名如program201210210101.txt 的一个日志文件,并在页面上显示当前小时的日志内容。
生成日志文件倒简单,就是"program".date("YmdHi",time()).".txt" 再fopen,fwrite,fclose;
但是显示当前小时内的日志内容让我有点无从下手。
我的思路是:1:有没一个函数,可以循环读取某目录下的所有文件名并存放进一个数组?,
2:去掉program与".txt"并与time()-3600比较,小于则读取文件内容存到变量里输出?
如果这方法可行的话,就是第一步有点问题,(我知道stat里有filectime可以看到文件的上次修改时间,所以能不能遍历文件夹中所有的文件然后用stat得到filectime属性进行比较?)
生成数组以后可以用array_filter过滤元素
上面的函数是可以求元素交集的,但有些小问题,改了两个地方:
function my_array_intersect( $a, $b ) { for ( $i = 0; $i<sizeof( $a ); $i++ ) { $m[] = $a[$i]; } for ( $i = 0; $i<sizeof( $b ); $i++ ) { $m[] = $b[$i]; } sort( $m ); $get = array(); for ( $i = 0; $i<sizeof( $m )-1; $i++ ) { if ( $m[$i]==$m[$i+1] ) { $get[] = $m[$i]; } } return array_unique($get); } var_dump(my_array_intersect( array(2,3,3,6), array(3,9,8,2) ));
glob()函数可以扫描指定目录下的特定类型文件,相当于linux下的find命令和win的文件搜索。scandir()可以列出一个目录下的所有文件,它们都是以数组返回。
第二个问题,用文件名和ctime时间都可以,看对准确性的要求了,因为构造出文件名到文件写入完成之间有极短的时间间隔,如果文件很大甚至会有若干秒的时间间隔,或者这个文件在写入时遇到了另一个进程的写锁导致写入延迟 ,这些时间很有想象空间。
######生成数组以后可以用array_filter过滤元素
上面的函数是可以求元素交集的,但有些小问题,改了两个地方:
function my_array_intersect( $a, $b ) { for ( $i = 0; $i<sizeof( $a ); $i++ ) { $m[] = $a[$i]; } for ( $i = 0; $i<sizeof( $b ); $i++ ) { $m[] = $b[$i]; } sort( $m ); $get = array(); for ( $i = 0; $i<sizeof( $m )-1; $i++ ) { if ( $m[$i]==$m[$i+1] ) { $get[] = $m[$i]; } } return array_unique($get); } var_dump(my_array_intersect( array(2,3,3,6), array(3,9,8,2) ));
glob()函数可以扫描指定目录下的特定类型文件,相当于linux下的find命令和win的文件搜索。scandir()可以列出一个目录下的所有文件,它们都是以数组返回。
第二个问题,用文件名和ctime时间都可以,看对准确性的要求了,因为构造出文件名到文件写入完成之间有极短的时间间隔,如果文件很大甚至会有若干秒的时间间隔,或者这个文件在写入时遇到了另一个进程的写锁导致写入延迟 ,这些时间很有想象空间。
非常感谢你的回答!问题解决了。目前先用glob实现了,再考虑ctime时间对比看看。
现在我有一些可能的想法:整个逻辑是这样:
1,打开页面后首先从文件目录里读取当前小时内的日志内容并存放到一变量里输出
2,用户输入日志,生成日志文件后,日志内容同时在一变量里存放。并输出
这样只有初次打开页面时候才涉及到文件操作,这样速度会不会更快?但是如果日志数量特别大,持续运行时间很长的话,要定时释放变量这样可能靠谱点。
元芳,你怎么看?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。