php通过数组和文件管理学生,php数组和文件操作

1、 把以下数组筛选出ip为内网的元素,根据ip合并,count值相加(结果仍存在count内),最后按照count值逆序排序。

$items = [

["ip"=>"10.1.1.3", "count"=>123],

["ip"=>"210.33.182.1", "count"=>34],

["ip"=>"82.12.193.2", "count"=>2],

["ip"=>"10.2.124.1", "count"=>20],

["ip"=>"10.1.1.3", "count"=>29],

["ip"=>"101unknow", "count"=>345],

["ip"=>"10.2.124.1", "count"=>20],

["ip"=>"10.80.19.92", "count"=>20],

];

function _isPrivate($ip) { //检查内网ip是否正确

$i = explode('.', $ip);

if ($i[0] == 10) return true;

if ($i[0] == 172 && $i[1] > 15 && $i[1] < 32) return true;

if ($i[0] == 192 && $i[1] == 168) return true;

return false;

}

$newlist = array(); //新的数组

foreach( $items as $v ) {

if ( _isPrivate($v['ip']) ) {

$ip = $v['ip'];

if (array_key_exists($ip,$newlist)) { //判断在新数组中是否已经存在该下标的数据

$newlist[$ip]['count']+=$v['count']; //存在累加

} else {

$newlist[$ip]['count']=$v['count']; //不存在放入数组

}

}

}

array_multisort($newlist,SORT_DESC,SORT_NUMERIC); //按数字降序排列

print_r($newlist);

已知道docx文件的前4个字节的内容是 504B0304(16进制),写程序判断一个文件是否正常的docx文件?

function fileTyep ( $filename ) {

$f = fopen($filename,'rb');

$byte = fread($f,4);

fclose($f);

$code = unpack('H8',$byte);

if ( strtoupper($code[1] == '504B0304' )){

return true;

} else {

return false;

}

}

var_dump(fileTyep('test.docx'));

用xmlreader读取一个超过1G的大xml文件(大的xml文件自己造出来)

ini_set('memory_limit','-1'); //不限制

set_time_limit(0);//不超时

//生成1g文件

function createXml ( $fiename,$bigsize ) {

$f = fopen($fiename, 'w');

$header = '';

$string = 'helloworld';

fwrite($f, $header);

while ( true ) {

$filesize = filesize($fiename);

if ($filesize > $bigsize) {

break;

}

fwrite($f, $string);

}

$footer = "";

fwrite($f, $footer);

fclose($f);

}

createXml('testxml.xml',1024*1024*1024);

//读取xml

$reader = new XMLReader();

$reader->open('testxml.xml'); //读取xml数据

$i=1;

while ($reader->read()) { //是否读取

if ($reader->nodeType == XMLReader::TEXT) { //判断node类型

if($i%3){

echo $reader->value; //取得node的值

}else{

echo $reader->value."" ;

}

$i++;

}

}

利用随机读写文件的原理,编写一个文件分割器,要求能切割和合并文件

class fileOperation{

private $filename;//文件名

private $n;//分割次数

private $filesize;//文件大小

private $pagesize;//计算分割后的大小

public function __construct( $name ,$n) {

$this->filename = $name;

$this->n = $n;

}

//切割文件

public function cutFile () {

$this->filesize = filesize($this->filename);

$this->pagesize = ceil($this->filesize/$this->n); //获取单个文件写入的文件大小

$f = fopen($this->filename,'rb');

$m = 1;//初始化

while( $m <= $this->n) {

$fr = fread( $f,$this->pagesize );//从主文件固定指针读取数据

$childdata = fopen($m.$this->filename,'w');//创建子文件写

fwrite($childdata,$fr); //往子文件写

$this->pagesize = ftell($f);//每次获取当前指针给全局变量

$m++;

}

fclose($f);

}

//合并文件

public function mergeFile ( $file,$filedata ) {

if (is_array($filedata)) {

return false;

}

$f = fopen($file,'a+');

foreach ( $filedata as $k=>$v ) { //循环要合并的文件

if ( is_array($v) ) {

$this->mergeFile($file,$v); //判断数组结构

} else {

if ( file_exists($v) && is_file($v) ) { //判断文件

$cf = fopen($v,'rb');

$content = '';

while(!feof($cf)){ //读取整个文件为止

$content .= fread($cf, filesize($v));//拼装读取的字符串内容

}

fclose($cf);

fwrite($f, $content);

}

}

continue;

}

fclose($f);

}

}

$c = new fileOperation('demo.txt',3);

$c->cutFile();

$data = array(

'1demo.txt',

'2demo.txt',

'3demo.txt',

array(

'4demo.txt',

'5demo.txt',

)

);

$c->mergeFile('homework.txt',$data);

@承鹏辉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值