1、字符串編碼轉換
/**
* 字符串編碼轉換
*
* @param string $str 待處理的字符
* @param string $in_charset 輸入編碼
* @param string $out_charset 輸出編碼
* @return string
*/
function str_iconv($str, $in_charset = 'UTF-8', $out_charset = 'GBK')
{
$str = mb_convert_encoding($str, $out_charset, $in_charset);
return $str;
}
2、數組編碼轉換
/**
* 數組編碼轉換
*
* @param array $arr 待處理的數組
* @param string $in_charset 輸入編碼
* @param string $out_charset 輸出編碼
* @return array
*/
function arr_iconv($arr, $in_charset = 'UTF-8', $out_charset = 'GBK'){
$arr = eval('return ' . mb_convert_encoding(var_export($arr,true), $out_charset, $in_charset) . ';');
return $arr;
}
3、從內容中匹配出圖片信息
/**
* 從內容中匹配出圖片信息(有多少圖片信息就匹配出多少)
*
* @param string $content 內容信息
* @param boolean $b_only_img_url 是否只獲取圖片地址,默認爲true
* @return array
* <li>當$b_only_img_url = true時,只返回圖片地址的一維數組</li>
* <li>當$b_only_img_url = false時,返回圖片地址的多種信息,二維數組,如下:</li>
* <li>img_tag => '<img src="http://www.baidu.com/img/bdlogo.gif" />'</li>
* <li>img_src => 'src="http://www.baidu.com/img/bdlogo.gif"'</li>
* <li>img_url => 'http://www.baidu.com/img/bdlogo.gif'</li>
*/
function get_img_list_from_content($content, $b_only_img_url = true){
preg_match_all('/<img[^>]*?(?P<img_src_arr>src\s*=\s*([\'"]|"|'|')(?P<img_url_arr>.*?)([\'"]|"|'|'))[^>]*?>/msi', $content, $match);
$arr_temp = array();
if($match['img_url_arr'])
{
foreach($match['img_url_arr'] as $key => $img_url)
{
if($b_only_img_url){
$img_info = $img_url;
} else {
$img_info = array(
'img_tag' => $match[0][$key],
'img_src' => $match['img_src_arr'][$key],
'img_url' => $match['img_url_arr'][$key],
);
}
$arr_temp[] = $img_info;
}
}
return $arr_temp;
}
4、獲取一個Hash編碼
/**
* 獲取一個Hash編碼
*
* @param string $str 字符串
* @return string
*/
function make_hash_code($str)
{
if(empty($str))
return '';
$mdv = md5($str);
$mdv1 = substr($mdv,0,16);
$mdv2 = substr($mdv,16,16);
$crc1 = abs(crc32($mdv1));
$crc2 = abs(crc32($mdv2));
return bcmul($crc1,$crc2);
}
5、根據某天返回特定日期
/**
* 根據當天的時間,返回此週末的時間
*
* @param string $date
* @return array $date_arr($Sat,$Sun)
*/
function get_weekend_by_date(){
$year = date("Y");
$month = date("m");
$day = date("d");
$nowday = mktime(0,0,0,$month,$day,$year);
$w=(int)date("w",$nowday);
if($w==0){
$Sat = mktime(0,0,0,$month,$day - 1,$year);
$Sun = mktime(0,0,0,$month,$day + 1,$year);
} else {
$t = 6 - $w;
$Sat = mktime(0,0,0,$month,$day + $t,$year);
$Sun = mktime(0,0,0,$month,$day + $t + 2,$year);
}
return array("Sat"=>$Sat,"Sun"=>$Sun);
}
/*
* 根據時間英文名稱,返回特定時間段戳
* @desc 返回今天,週末,下週,未來,過去,某個時間段對應的時間戳
* @param string $time_type 時間形式(today, weekend, next_week,future_all,history, time_to_time)
* @param $search_end_time 當time_type爲time_to_time時,需要傳入時間戳
* @return array;
*/
function get_timestamp_by_time_type($time_type = "today", $search_end_time = "")
{ // 支持的日期格式名稱
// $time_type_arr = array('today', 'weekend', 'next_week', 'future_arr', 'history', 'time_to_time');
switch ($time_type)
{
case "today": //今天
$today = strtotime(date('Y-m-d'));
$tomorrow = $today+86400;
$querys["start_time"] = $tomorrow;
$querys["end_time"] = $today;
break;
case "weekend": //週末
$arr = mforum_get_weekend_by_date();
$querys["start_time"] = $arr["Sun"];
$querys["end_time"] = $arr["Sat"];
break;
case "next_week": //未來7天
$today = strtotime(date('Y-m-d'));
$next_week = $today+(86400*7);
$tomorrow = $today+86400;
$querys["start_time"] = $next_week;
$querys["end_time"] = $tomorrow;
break;
case "future_all": //未來全部
$nowtime=time();
$querys["end_time"] = $nowtime;
break;
case "history": //歷史活動
$nowtime=time();
$querys["end_time"] = "< {$nowtime}";
break;
case "time_to_time": //選擇時間段
$end_time = strtotime($search_end_time);
if(!empty($end_time)) {
$day = strtotime(date('Y-m-d',$end_time));
$tomorrow = $day+86400;
$querys["start_time"] = $tomorrow;
$querys["end_time"] = $day;
}
break;
default:
break;
}
return $querys;
}
6、根據過期時間判斷剩餘的天數
/**
* 根據過期時間判斷剩餘的天數
* @desc 如果爲0,則表示活動已經結束
* @param $expire_time 時間戳
* @return float|int
*/
function check_remaining_days($expire_time)
{
// 獲取當前時間
$cur_time = time();
$expire_time = (int)$expire_time;
$diff_time = ($expire_time - $cur_time);
$remaining_days_count = 0;
if($diff_time > 0) {
// 計算剩餘的天數
$remaining_days_count = ceil($diff_time / (24 * 3600));
}
return $remaining_days_count;
}
7、獲取某月的第一天和最後一天
// php獲取當月天數及當月第一天及最後一天、上月第一天及最後一天實現方法
1.獲取上個月第一天及最後一天.
echo date('Y-m-01', strtotime('-1 month'));
echo "<br/>";
echo date('Y-m-t', strtotime('-1 month'));
echo "<br/>";
2.獲取當月第一天及最後一天.
$BeginDate=date('Y-m-01', strtotime(date("Y-m-d")));
echo $BeginDate;
echo "<br/>";
echo date('Y-m-d', strtotime("$BeginDate +1 month -1 day"));
echo "<br/>";
3.獲取當天年份、月份、日及天數.
echo " 本月共有:".date("t")."天";
echo " 當前年份".date('Y');
echo " 當前月份".date('m');
echo " 當前幾號".date('d');
echo "<br/>";
4.使用函數及數組來獲取當月第一天及最後一天,比較實用
function getthemonth($date)
{
$firstday = date('Y-m-01', strtotime($date));
$lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day")); return array($firstday,$lastday);
}
$today = date("Y-m-d");
$day=getthemonth($today);
echo "當月的第一天: ".$day[0]." 當月的最後一天: ".$day[1];
echo "<br/>";
5.封裝了一個方法,開箱即用:
$year = 2017;
$month = 2;
function get_month_first_and_last_day($year, $month)
{
if(empty($year) || empty($month)) {
return array();
}
$date = $year . "-" . $month;
$begin_date = date('Y-m-01 00:00:00', strtotime($date));
$last_date = date('Y-m-d 23:59:59', strtotime("$begin_date +1 month -1 day"));
return array('begin_date' => $begin_date, 'last_date' => $last_date);
}
$ret = get_month_first_and_last_day($year, $month);
print_r($ret);Array(
[begin_date] => 2017-02-01 00:00:00
[last_date] => 2017-02-28 23:59:59)
8、根據二維數組的數據字段名返回其對應的值數組
* 根據二維數組的數據字段名返回其對應的值數組
*
* @param array $rows 二維數組
* @param string $field_name 字段名
* @param boolean $b_off_empty 是否排除空值,默認:true
* @return array
*/
function array_values_by_field_name($rows, $field_name, $b_off_empty = false){
$ret = array();
foreach($rows as $row) {
if(isset($row[$field_name])) {
if($b_off_empty) {
if(!empty($row[$field_name])) {
$ret[] = $row[$field_name];
}
} else {
$ret[] = $row[$field_name];
}
}
}
return $ret;
}