<?php
/**
* Created by PhpStorm.
* User: liufangting
* Date: 2016/4/25
* Time: 11:04
*/
class CommonHelp
{
/**
* [获取时间差]
* @param $time
* @return string
*/
public static function transformTime($time)
{
$rtime = date("m-d H:i", $time);
$rtime2 = date("Y-m-d H:i", $time);
$htime = date("H:i", $time);
$time = time() - $time;
switch (true) {
case $time < 60:
$str = $time . '秒前';
break;
case $time < 60 * 60:
$min = floor($time / 60);
$str = $min . '分钟前';
break;
case $time < 60 * 60 * 24:
$h = floor($time / (60 * 60));
$fen = $time - $h * 3600;
$fen = ($fen > 60) ? floor($fen / 60) . '分钟' : '';
$str = $h . '小时' . $fen . '前';
break;
// case $time < 60 * 60 * 24 * 3:
// $d = floor($time / (60 * 60 * 24));
// $str = ($d == 1) ? '昨天' : '前天';
// break;
case $time < 60 * 60 * 24 * 7:
$d = floor($time / (60 * 60 * 24));
$str = $d . '天前';
break;
case $time < 60 * 60 * 24 * 30:
$str = $rtime;
break;
default:
$str = $rtime2;
}
return $str;
}
/**获取某段时间的范围
* @param $start_date
* @param $end_date
* @return array
*/
public static function getDateRange($start_date, $end_date)
{
$date_array = array();
for ($i = 0; ; $i++) {
$date_array[$i] = date('Y-m-d', strtotime($start_date) + $i * 24 * 60 * 60);
if (strtotime($date_array[$i]) >= strtotime($end_date)) break;
}
return $date_array;
}
/**
* 返回输入数组中某个单一列的值
* @param $searchArr [必须! 规定要使用的多维数组]
* @param string $searchField [必须! 需要返回值的列]
* @param string $indexKey [可选 用作返回数组的索引/键的列]
* @param array $result [不需要!存储返回值的列] 注意:不必给参数
* @param array $result2 [不需要!存储返回数组的索引] 注意:不必给参数
* @return array [返回键值对结果]
*/
public static function arrColumn($searchArr, $searchField = '', $indexKey = '', & $result = [], & $result2 = [])
{
if (empty($searchArr) || empty($searchField)) {
return $result;
}
foreach ($searchArr as $key => $val) {
if (is_array($val)) {
self::arrColumn($val, $searchField, $indexKey, $result, $result2);
} else {
if ($key == $searchField) {
$result[] = $val;
}
if ($key == $indexKey) {
$result2[] = $val;
}
}
}
return empty($indexKey) ? $result : array_combine($result2, $result);//用一个数组的值作为其键名,另一个数组的值作为其值
}
/**
* 数组筛选
* @param array $haystack = [] 需筛选的数组
* @param array $retain = [] 需保留的字段
* @return array
* @author LianDa
* @remark 从数组中筛选出需要保留的字段并组成新的数组返回
*/
public static function filterArr($haystack = [], $retain = [])
{
// 验证参数
if (empty($haystack) || empty($retain)) {
return $haystack;
}
// 开始筛选
$result = [];
foreach ($haystack as $key => $val) {
// 如键是数组,则递归
if (is_array($val)) {
$result[$key] = self::filterArr($val, $retain);
} else {
// 是否在需保留的字段中
if (in_array($key, $retain) || is_numeric($key)) {
$result[$key] = $val;
}
}
}
// 释放并返回
unset($haystack);
return $result;
}
/**
* 把预定义的字符批量转化为HTML实体,支持多维数组
* @param $param [要转义的参数]
* @return array [返回转义后的数组]
*/
public static function deepHtmlSpecilChars($param)
{
if (empty($param)) {
return array();
}
return is_array($param) ? array_map([__CLASS__, 'deepHtmlSpecilChars'], $param) : htmlspecialchars($param);
}
/**
* 过滤参数防XSS跨站脚本攻击和sql注入,支持多维数组
* @param string $param [要过滤的参数]
* @return array [返回过滤后的参数]
*/
public static function deepFilter($param = '')
{
if (empty($param)) {
return $param;
}
return is_array($param) ? array_map([__CLASS__, 'deepFilter'], $param) : strip_tags(addslashes($param));
}
/*
*唯一单号生产 总过22位
* ***/
public static function onlyNo()
{
$dateStr = date("YmdHis"); //20160710125226 14 位
list($tmp1, $tmp2) = explode(' ', microtime());
$microsecond = mb_substr($tmp1, 2, 3, "utf8"); //3位
$rand = random_int(10000, 99999);//5
$onlyNo = $dateStr . $microsecond . $rand;
return $onlyNo;
}
}