个人常用自定义php函数

一、显示提示信息并跳转

/**
	* 函数名称	:show_msg
	* 作用		:【私有】显示提示信息
	* @param	: char $message 提示信息
	* @param	: char $url 跳转地址
	* @author	: dingling <dingling136@163.com>
	* @version	: 0.01
	* @date		: 2015/12/30
	*/
	private function show_msg($message,$url){
		$str = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
		$str.="<script>alert('";
		$str.=$message;
		$str.="');</script>";
		echo $str;
		if(!isset($url)) $url=$_SERVER["HTTP_REFERER"];
		$str2='';
		$str2.="<script>location.href ='";
		$str2.=$url ;
		$str2.="';</script>";
		echo $str2;
		exit;
	}

二、导出日志文件

/**
	* 函数名称	:logFile
	* 作用		:【私有】写日志
	* @parm1	: 日志文件名称
	* @parm2	: 记录的信息
	* @version	: 0.01
	* @date		: 2015/12/7
	*/
	private function logFile($filename,$msg){
		$fd = fopen($filename,"a");
		//$str = "[".date("Y/m/d h:i:s",time())."]".$msg;
		fwrite($fd, $msg."\n");
		fclose($fd);
	}

三、将一维数组中的元素按照另一个一维数组中指定个数分布拆分成二维数组

/**
	* 函数名称	:yiweiToErwei
	* 作用		:【私有】将一维数组中的元素按照另一个一维数组中指定个数分布拆分成二维数组
	* @parm1	: 一维数组,要被拆分的数组
	* @parm2	: 一维数组,拆分的规则
	* @param3	:拆分后的数组规定的字段长度
	*/
function yiweiToErwei($arr1,$arr2,$max_col_num){
	if(!is_array($arr1)||!is_array($arr2)){
		return false;
	}
	foreach($arr2 as $k=>$v){
		if(!is_int($v))
			return false;
	}
	
	foreach($arr2 as $k=>$v){
		foreach($arr1 as $key=>$val){
			if($key<$v)
				$temp[] = $val;	
		}
		$arr1 = array_values(array_diff($arr1,$temp));
		$head[] = $temp;
		unset($temp);
	}
	//补空
	foreach($head as $k=>$v){
		if(count($head[$k])<$max_col_num){
			for($i=0;$i<$max_col_num-count($head[$k]);$i++){
				$temp[] = '';
			}
			if($k==0)
				$head2[] = array_merge($head[$k],$temp);
			else
				$head2[] = array_merge($temp,$head[$k]);
		}elseif(count($head[$k])==$max_col_num||count($head[$k])>$max_col_num){
			$head2[] = $head[$k];
		}
		unset($temp);	
	}
	return $head2;
}
$arr1 = array(1,2,3,4,5,6,7,8,9,10);
$arr2 = array(5,3,2);
$return_data = yiweiToErwei($arr1,$arr2,5);
echo '<pre/>';var_dump($return_data);
四、将一维数组按照固定长拆分成二维数组

/**
	* 函数名称	:yiweiToErwei2
	* 作用		:【私有】将一维数组按照固定长拆分成二维数组
	* @parm1	: 一维数组,要被拆分的数组
	* @parm2	: 固定长度
	*/
	function yiweiToErwei2($arr1,$max_col_num){
		foreach($arr1 as $k=>$v){
			$data[$k/$max_col_num][$k%$max_col_num] = $v;
		}
		return $data;
	}
$return_data = yiweiToErwei2($arr1,5);


五、字符串替换(将一段字符串中相同的字符替换成有规律的字符)

比如将<li>替换成<li><em class="n1">1</em>、<li><em class="n1">2</em>、<li><em class="n1">3</em>、<li><em class="n1"></em>、...

效果就是  

$temp = str_ireplace('class="left_2"','class="module-r"',$temp);
		$temp = str_ireplace('<span class="left1_title">','<div class="tit-r">',$temp);
		$temp = str_ireplace('</span>','</div>',$temp);
		$temp = str_ireplace('<ul>','<ul class="hot_ul">',$temp);
		$num1 = strpos($temp,'<li>');
		$temp = substr_replace($temp,'<li><em class="n1">1</em>',$num1,4);
		$num2 = strpos($temp,'<li>',$num1+4);
		$temp = substr_replace($temp,'<li><em class="n1">2</em>',$num2,4);
		$num3 = strpos($temp,'<li>',$num2+4);
		$temp = substr_replace($temp,'<li><em class="n1">3</em>',$num3,4);
		for($i = 3 ; $i < 10; $i++){
			$m = 'num'.$i;
			$j = $i+1;
			$n = 'num'.$j;
			$$n = strpos($temp,'<li>',$$m+4);
			$temp = substr_replace($temp,'<li><em class=""></em>',$$n,4);
		}


六、截取字符串

/* 截取一定长度的完整的中文字符 */
function cnsubstr($str,$strlen=10,$en=false) {
	if(empty($str)||!is_numeric($strlen)){
		return false;
	}
	if ($en) {
		//如果出现3个英文字母就少一个字符  add by dingxf
		$mt = preg_match_all('#[A-Zmw]#',substr($str,0,$strlen),$match);
		$strlen = $strlen - floor($mt/2.8);
	}

	if(strlen($str)<=$strlen){
		return $str;
	}
	//得到第$length个字符 并判断是否为非中文 若为非中文
	//直接返回$length长的字符串
	$last_word_needed=substr($str,$strlen-1,1);
	if(!ord($last_word_needed)>128){
		$needed_sub_sentence=substr($str,0,$strlen);
	}else{
		for($i=0;$i<$strlen;$i++){
			if(ord($str[$i])>128){
				$i++;
			}
		}//end of for
		$needed_sub_sentence=substr($str,0,$i);
	}
	return $needed_sub_sentence;
}

七、
获取指定目录下特定文件名的列表

<?php
#desc:将msg写入文件中
#param1:filename 文件名
#param2:msg 写入信息
function logFile($filename,$msg){  
	$fd = fopen($filename,"a");  
	fwrite($fd, $msg."\r\n");  
	fclose($fd);  
} 
#desc:获取指定目录下特定文件名的列表 
#param1:dir  目录
#param2:filename 文件名
#param3:suffix 文件后缀 读取所有则输入*.*
function logCurrentDirAndFile($dir,$filename,$suffix){
	if(is_dir($dir)){
		if ($dh = opendir($dir)){
			while (($file = readdir($dh))!= false){
				//文件名的全路径 包含文件名
				$filePath = $dir.$file;
				//获取文件修改时间
				$fmt = filemtime($filePath);
	
				$str = "[".date("Y-m-d H:i:s",$fmt)."] ".$filePath;
				if($suffix != '*.*' && strpos($file , $suffix))
					logFile($filename , $str);
				if($suffix == '*.*')
					logFile($filename , $str);
			}
			closedir($dh);
		}
	}
}	
	
logCurrentDirAndFile('./' , 'test.txt' , '.php');
logCurrentDirAndFile('./' , 'test2.txt' , '*.*');

/**
     * 获取毫秒数
     */
	public static function getMillisecond() {
		list($t1, $t2) = explode(' ', microtime());
		return (int)sprintf('%.0f',(floatval($t1)+floatval($t2))*1000);
	}
	
	/**
     * 生成随机字符串
     */
	 public static function generateStr($length = 16) {  
		$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; 
		$str = ''; 
		for( $i = 0; $i < $length; $i++ ) { 
			$str .= $chars[ mt_rand(0, strlen($chars) - 1) ]; 
		} 
		return $str; 
	} 

<?php
function asc2bin($temp){ 
  return sprintf("%08b",ord($temp)); 
}
$file1 = '/home/ding/chunk1';
$file2 = '/home/ding/chunk2';
$handle1 = fopen($file1,'r');
$handle2 = fopen($file2,'r');
$size = filesize($file1) > filesize($file2) ? filesize($file1) : filesize($file2);
$j=1;
for($i = 0 ; $i < $size ; $i++){
	$content1 = fread($handle1 , 1);
	$content2 = fread($handle2 , 1);
	if(asc2bin($content1) != asc2bin($content2)){
		logFile('/home/ding/compare2' ,$content1 . '@' .$content2);
		$j++;
	}
	fseek($handle1, $i);
	fseek($handle2, $i);
}

fclose($handle1);
fclose($handle2);
echo $j;

下载文件

public static function downloadScel($url,$name){
		$file = fopen($url, "rb"); 
		Header( "Content-type:   application/octet-stream "); 
		Header( "Accept-Ranges:   bytes "); 
		Header( "Content-Disposition:   attachment;   filename= {$name}"); 
		$contents = "";
		while (!feof($file)) {
		  $contents .= fread($file, 8192);
		}
		$fd = fopen($name,"a");
		fwrite($fd, $contents);
		fclose($fd);
		fclose($file); 
	}


过滤xml中特殊字符的函数  utf-8可用

function wpjam_strip_control_characters($string){
     return preg_replace('/[\x00-\x1F\x7F-\x9F]/u', '', $string);
}


/**
 * 函数名:count_words
 * 功能说明:统计文章字数和图片数
 * 参数:文章内容字符串
 * 返回:array
 */
function countWords($str){
    $str = trim($str);
    $wordCount = 0;
    $picCount = 0;
    $pattern = "/\[#img_[0-9]+_[a-z]*_[0-9]+_[a-zA-Z]*/i";
    #统计图片数
    preg_match_all($pattern, $str, $match_arrs);
    $picCount = count($match_arrs[0]);
    ##增加新的图片记数方式
    preg_match_all('/<img /i',$str,$match_arrs);
    $picCount = $picCount + count($match_arrs[0]);

    #统计字数
    $str = preg_replace($pattern, "", $str);
    $str = preg_replace("/<img([^>].+)>/iU","",$str);    ##去掉图片标签
    $str = str_replace(' ','',$str);               ##去掉空格
    $wordCount = strlen(trim(strip_tags($str)))/2;
    
    return array(
        'wordCount'=>$wordCount,
        'picCount'=>$picCount,
    );
}

 
####将数据导出到csv文件
if( !$rows ) { return false;}
header('content-type:text/html; charset=gbk');
$csvStr = "编号,频道id,频道名称,域名\r\n";
$i=1;
$icnt=count($rows);
foreach ( $rows as $row ){
    $csvStr .= $i.','.implode(',',$row)."\r\n";
    $i++;
    unset($row);
}
echo $csvStr;
$name = date('YmdHis');
file_put_contents('./'.$name.'.csv', $csvStr);

#二维数组中有N个元素,判断有N-1个元素相同,则认为他们相同,只保留一个,最后返回ID

<?php
$arr2 = array(
	array('id'=>3,'simhash_16_int1'=>37120,'simhash_16_int2'=>5976,'simhash_16_int3'=>38,'simhash_16_int4'=>16384),
	array('id'=>4,'simhash_16_int1'=>37120,'simhash_16_int2'=>5976,'simhash_16_int3'=>16678,'simhash_16_int4'=>16384),
	array('id'=>6,'simhash_16_int1'=>37120,'simhash_16_int2'=>5976,'simhash_16_int3'=>294,'simhash_16_int4'=>16384),
	array('id'=>1,'simhash_16_int1'=>38144,'simhash_16_int2'=>5960,'simhash_16_int3'=>38,'simhash_16_int4'=>16384),
	array('id'=>2,'simhash_16_int1'=>38144,'simhash_16_int2'=>5976,'simhash_16_int3'=>16678,'simhash_16_int4'=>16384),
	array('id'=>5,'simhash_16_int1'=>38144,'simhash_16_int2'=>5960,'simhash_16_int3'=>38,'simhash_16_int4'=>16384),	
);
function  filt($simhash16){
	if(empty($simhash16)){
		return false;
	}
	
	#先将完全相同的过滤掉
	$temp = array();
	foreach($simhash16 as $k=>$v){
		$temp[$v['id']] = $v['simhash_16_int1'].$v['simhash_16_int2'].$v['simhash_16_int3'].$v['simhash_16_int4'];
	}
	$temp = array_unique($temp);
	$temp2 = array_keys($temp);
	
	$simhash16_2 = array();
	foreach($simhash16 as $k=>$v){
		if(in_array($v['id'] , $temp2)){
			$simhash16_2[] = $v;
		}
	}
	
	$simhash16_2_num = count($simhash16_2);
	#如果过滤完只有1个元素,则直接返回该元素的id
	if($simhash16_2_num == 1){
		return isset($simhash16_2[0]['id']) ? $simhash16_2[0]['id'] : false;
	}
	
	$delete_id = array();
	
	for($i=0; $i<$simhash16_2_num; $i++){
		foreach($simhash16_2 as $k=>$v){
			$k2 = $k+1;
			#最后一个元素不需要比较
			if($k2 == $simhash16_2_num){
				continue;
			}
			$equal_num = 0;
			if($simhash16_2[$k]['simhash_16_int1'] == $simhash16_2[$k2]['simhash_16_int1']){
				$equal_num++;
			}
			if($simhash16_2[$k]['simhash_16_int2'] == $simhash16_2[$k2]['simhash_16_int2']){
				$equal_num++;
			}
			if($simhash16_2[$k]['simhash_16_int3'] == $simhash16_2[$k2]['simhash_16_int3']){
				$equal_num++;
			}
			if($simhash16_2[$k]['simhash_16_int4'] == $simhash16_2[$k2]['simhash_16_int4']){
				$equal_num++;
			}
			if($equal_num >= 3){
				$delete_id[] = $simhash16_2[$k2]['id'];
			}
		}
	}
	$delete_id = array_unique($delete_id);
	
	$diff_id = array();
	if(!empty($delete_id)){
		foreach($simhash16_2 as $k=>$v){
			if(in_array($v['id'] , $delete_id)){
				unset($simhash16_2[$k]);
			}else{
				$diff_id[]= $v['id'];
			}
		}
	}else{
		foreach($simhash16_2 as $k=>$v){
			$diff_id[]= $v['id'];
		}
	}
	
	return $diff_id;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扬子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值