common随笔记录方法
/**
* 重置多维数组索引
* @param $array
* @return array
*/
function reform_keys($array){
if(!is_array($array)){
return $array;
}
$keys = implode('', array_keys($array));
if(is_numeric($keys)){
$array = array_values($array);
}
$array = array_map('reform_keys', $array);
return $array;
};
/**
* ip解析城市
* @param string $ip
* @return mixed
*/
function GetIpLookup($ip = ''){
$url = 'http://ip-api.com/json/'. $ip.'?lang=zh-CN';
$res = curl_http($url,[],"get");;
$json = json_decode($res,true);
if(isset($json['status']) && $json['status'] == 'success'){
$arr['regionName'] = $json['regionName'];
$arr['city'] = $json['city'];
unset($json);
}else{
$arr['regionName'] = '未知';
$arr['city'] = '未知';
}
return $arr;
}
/*
**多维数组中是否存在该字段
*/
function deep_in_array($value, $array) {
foreach($array as $item) {
if(!is_array($item)) {
if ($item == $value) {
return true;
} else {
continue;
}
}
if(in_array($value, $item)) {
return true;
} else if(deep_in_array($value, $item)) {
return true;
}
}
return false;
}
/**
* 二维数组中取最大值
* @param $arr
* @param $field
* @return bool|mixed
*/
function searchmax($arr, $field) // 最小值 只需要最后一个max函数 替换为 min函数即可
{
if (!is_array($arr) || !$field) { //判断是否是数组以及传过来的字段是否是空
return false;
}
$temp = array();
foreach ($arr as $key => $val) {
$temp[] = $val[$field]; // 用一个空数组来承接字段
}
return max($temp); // 用php自带函数 max 来返回该数组的最大值,一维数组可直接用max函数
}
/** * 生成某个范围内的随机时间 *
* @param <type> $begintime 起始时间 格式为 Y-m-d H:i:s * @param <type> $endtime
* 结束时间 格式为 Y-m-d H:i:s */
function randomDate($begintime, $endtime="")
{
$begin = strtotime($begintime);
$end = $endtime == "" ? mktime() : strtotime($endtime);
$timestamp = rand($begin, $end);
return date("Y-m-d H:i:s", $timestamp);
}
/**
* 随机打乱二维数组顺序
* @param $array
* @return array
*/
function shuffle_assoc($lists)
{
if(!is_array($lists)){
return $lists;
}else{
$keys = array_keys($lists);
//打乱数组的键排序
shuffle($keys);
$result = array();
foreach ($keys as $k=> $key){
$result[$k] = $lists[$key];
}
}
return $result;
}
/**
* 二维数组去掉重复值
* @param $array
* @return array
*/
function array_unique_fb($array)
{
$out = array();
foreach ($array as $key => $value) {
if (!in_array($value, $out)) {
$out[$key] = $value;
}
}
$out = array_values($out);
return $out;
}
function set_http_request($url, $headers, $params = array(), $method = "GET")
{
$ci = curl_init();
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ci, CURLOPT_TIMEOUT, 30);
curl_setopt($ci, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($ci, CURLOPT_URL, $url);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ci, CURLOPT_HEADER, FALSE);
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
if ($headers != "") {
curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
} else {
curl_setopt($ci, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
}
switch (strtoupper($method)) {
case 'POST':
curl_setopt($ci, CURLOPT_POST, TRUE);
curl_setopt($ci, CURLOPT_POSTFIELDS, $params);
break;
case 'PUT':
curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ci, CURLOPT_POSTFIELDS, $params);
break;
case 'PATCH':
curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ci, CURLOPT_POSTFIELDS, $params);
break;
case 'DELETE':
curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ci, CURLOPT_POSTFIELDS, $params);
break;
default:
curl_setopt($ci, CURLOPT_HTTPGET, TRUE);
break;
}
$response = curl_exec($ci);
$httpCode = curl_getinfo($ci);
curl_close($ci);
return $response;
}
//还原科学计数
function decimalnotation($num){
$parts = explode('E', $num);
if (count($parts) != 2) {
return $num;
}
$exp = abs(end($parts)) + 3;
$decimal = number_format($num, $exp, '.', '');
$decimal = rtrim($decimal, '0');
return rtrim($decimal, '.');
}
/**
数据脱敏
@param $string 需要脱敏值
@param int $start 开始
@param int $length 结束
param string $re 脱敏替代符号
return bool|string
例子:
dataDesensitization('13126989876', 3, 4); //131****9876
dataDesensitization('张三四', 0, -1); //**四
*/
function desensitization($string, $start = 0, $length = 0, $re = '*')
{
if (empty($string)) {
return false;
}
$strarr = array();
$mb_strlen = mb_strlen($string);
while ($mb_strlen) {//循环把字符串变为数组
$strarr[] = mb_substr($string, 0, 1, 'utf8');
$string = mb_substr($string, 1, $mb_strlen, 'utf8');
$mb_strlen = mb_strlen($string);
}
$strlen = count($strarr);
$begin = $start >= 0 ? $start : ($strlen - abs($start));
$end = $last = $strlen - 1;
if ($length > 0) {
$end = $begin + $length - 1;
} elseif ($length < 0) {
$end -= abs($length);
}
for ($i = $begin; $i <= $end; $i++) {
$strarr[$i] = $re;
}
if ($begin >= $end || $begin >= $last || $end > $last) return false;
return implode('', $strarr);
}
/**
* 生成随机小数
*/
function randFloat($min, $max)
{
if ($min >= $max) {
throw new \Exception('最大值必须大于最小值', 501);
}
$rand = $min + mt_rand() / mt_getrandmax() * ($max - $min);
return floatval(sprintf('%.2f', $rand));
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现