PHP收集一些常用函数与好用的自定义函数
1.自定义打印函数P
//自定义打印
function pp($data,$exit=0){
// 定义样式
$str='<pre style="display: block;padding: 9.5px;margin: 44px 0 0 0;font-size: 13px;line-height: 1.42857;color: #333;word-break: break-all;word-wrap: break-word;background-color: #F5F5F5;border: 1px solid #CCC;border-radius: 4px;">';
// 如果是boolean或者null直接显示文字;否则print
if (is_bool($data)) {
$show_data=$data ? 'true' : 'false';
}elseif (is_null($data)) {
$show_data='null';
}else{
$show_data=print_r($data,true);
}
$str.=$show_data;
$str.='</pre>';
echo $str;
if($exit)
exit;
}
效果:
2.array_clomn() 和array_combine() 和array_values()
说明
array_column() 返回input
数组中键值为column_key
的列, 如果指定了可选参数index_key
,那么input
数组中的这一列的值将作为返回数组中对应值的键。
$keys
, array $values
):数组通过使用数组中的值keys
作为键并使用 values
数组中的值作为对应值来 创建数组。
array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名。
例:有这样一个数组 $arr:
想取出id对应name的值 的数组
$arr = array_column($goods,'name','id');
输出为
$arr = array_combine(array_column($arr,'id'),$arr);
输出结果为
清除掉键名 : $arr = array_values($arr) 应用场景举例(循环合并数组后清除掉前面的id键名)
3.array_filter()
$array
, $callback
)
依次将 array
数组中的每个值传递到 callback
函数。如果 callback
函数返回 true,则 array
数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
如果第二个值不填,则是过滤掉数组中的空值,第二个参数可以是自定义参数,挨个把数组的值丢进自定义函数,符合条件值的就返回
例:想把数组$results中title数组为空的过滤掉
Array ( [0] => Array ( [id] => 61 [name] => 操作指南 [category_id] => 64 [displayorder] => 1 [title] => Array ( [0] => Array ( [id] => 2 [name] => 采购操作指南 [category_id] => 61 ) [1] => Array ( [id] => 3 [name] => 测试操作 [category_id] => 61 ) ) ) [1] => Array ( [id] => 62 [name] => 入驻协议 [category_id] => 64 [displayorder] => 0 [title] => Array ( ) ) [2] => Array ( [id] => 64 [name] => 提现帮助 [category_id] => 64 [displayorder] => 0 [title] => Array ( [0] => Array ( [id] => 1 [name] => 提现帮助 [category_id] => 64 ) ) ) )
实现代码:
$results = array_filter($results,function ($val){return !empty($val['title']);});
执行并打印后
键为1的title数值为空,就被过滤掉了
4.array_sum(array_column($array,$column));
array_sum()是计算一维数组的值的和,array_column()是从二维数组$array中取出一列$column,
下面演示计算二维数组$results的o_id这一列的和
Array ( [0] => Array ( [code] => LS-20191018-3860224 [sign_user] => 鏉庡皯椋� [o_id] => 151 ) [1] => Array ( [code] => LS-20191019-8978560 [sign_user] => 鏉庣粛椋� [o_id] => 171 ) [2] => Array ( [code] => LS-20191022-7495040 [sign_user] => 鏉庣粛椋� [o_id] => 187 ) [3] => Array ( [code] => LS-20191022-1037312 [sign_user] => 鏉庣粛椋� [o_id] => 187 ) [4] => Array ( [code] => LS-20191022-2244480 [sign_user] => 鏉庣粛椋� [o_id] => 187 ) [5] => Array ( [code] => LS-20191023-5884288 [sign_user] => 鏉庣粛椋� [o_id] => 192 ) [6] => Array ( [code] => LS-20191023-1440512 [sign_user] => 鏉庣粛椋� [o_id] => 190 ) [7] => Array ( [code] => LS-20191023-5723264 [sign_user] => 鏉庣粛椋� [o_id] => 200 ) )
代码:
$num = array_sum(array_column($results,'o_id'));
结果:
1465
5.set_key_field()
/**
* 替换/增加 二位数组属性值 给二维数组中的每个一维数组增加若干列或者删除若干列
*
* @param array $data 需替换的二维数组
* @param array $data $key[替换的健] => $val['替换的值'] (可多个健值)
* @param array $data 需要删除的而为数组的健值 例:['id','key'...]
*/
function set_key_field($results = [],$data = [],$del_key = [])
{
if(empty($results) || empty($data) || !is_array($results) || !is_array($data))
return $results;
foreach($results as &$val) {
if(!is_array($val)) {
continue;
}
if(!empty($del_key)) {
foreach($del_key as $del) {
if(!empty($val[$del]))
unset($val[$del]);
}
}
foreach($data as $data_key => $data_val) {
$val[$data_key] = $data_val;
}
}
return $results;
}
6.array_slice() 函数
1.从数组中按条件取出值,我实际应用到的场景是从一个数组中取出最后两个元素的值
例:
<?php
$a=array("red","green","blue","yellow","brown");
print_r(array_slice($a,-2)
);
?>
array_slice(array,start,length,preserve)
第一个参数是要操作的数组,第二个参数是从第几个开始取,第三个可选参数是取多少个,默认取完,第四个可选参数true或false ,true保留键名,默认false重置键名
7.strip_tags() 函数
过滤掉字符串中的html标签,例如:echo strip_tags( ‘<p>222</p>’) ;输出222,把p标签过滤掉了
8.similar_text(string,string)函数
比较两个字符串的相似度,返回一个数字,例如70,说明两个字符串的相似度是70%
9.中文地址转化为经纬度
function address($address=null)
{
if(empty($address)) return false;
$url = 'http://restapi.amap.com/v3/geocode/geo?address=' . $address . '&key=425ad4cb67dab10eba37566bf842dd13';
if ($result = file_get_contents($url)) {
$result = json_decode($result, true);
//判断是否成功
if (!empty($result['count'])) {
return explode(',', $result['geocodes']['0']['location']);
} else {
return false;
}
}
}
10.根据两个地址的经纬度计算距离
根据经纬度算距离,返回结果单位是公里,lng经度,lat纬度
//如果miter = true ,返回米数否则返回公里数
public function getdistance1($lng1, $lat1, $lng2, $lat2, $miter = false)
{
//将角度转为狐度
$lng1 = floatval($lng1);
$lat1 = floatval($lat1);
$lng2 = floatval($lng2);
$lat2 = floatval($lat2);
$radLat1 = deg2rad($lat1);//deg2rad()函数将角度转换为弧度
$radLat2 = deg2rad($lat2);
$radLng1 = deg2rad($lng1);
$radLng2 = deg2rad($lng2);
$a = $radLat1 - $radLat2;
$b = $radLng1 - $radLng2;
$s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137 * 1000;
if ($miter === false) {
return number_format($s / 1000, 2);
} else {
return round(number_format($s, 2));
}
}
11.CURL请求
//$options CURL的参数
function curl_go($url, $params = [], $method = 'GET', $options = [])
{
$method = strtoupper($method);
$protocol = substr($url, 0, 5);
$query_string = is_array($params) ? http_build_query($params) : $params;
$ch = curl_init();
$defaults = [];
if ('GET' == $method) {
$geturl = $query_string ? $url . (stripos($url, "?") !== false ? "&" : "?") . $query_string : $url;
$defaults[CURLOPT_URL] = $geturl;
} else {
$defaults[CURLOPT_URL] = $url;
if ($method == 'POST') {
$defaults[CURLOPT_POST] = 1;
} else {
$defaults[CURLOPT_CUSTOMREQUEST] = $method;
}
$defaults[CURLOPT_POSTFIELDS] = $params;
}
$defaults[CURLOPT_HEADER] = false;
$defaults[CURLOPT_USERAGENT] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.98 Safari/537.36";
$defaults[CURLOPT_FOLLOWLOCATION] = true;
$defaults[CURLOPT_RETURNTRANSFER] = true;
$defaults[CURLOPT_CONNECTTIMEOUT] = 3;
$defaults[CURLOPT_TIMEOUT] = 3;
// disable 100-continue
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
if ('https' == $protocol) {
$defaults[CURLOPT_SSL_VERIFYPEER] = false;
$defaults[CURLOPT_SSL_VERIFYHOST] = false;
}
curl_setopt_array($ch, (array)$options + $defaults);
$ret = curl_exec($ch);
$err = curl_error($ch);
if (false === $ret || !empty($err)) {
$errno = curl_errno($ch);
$info = curl_getinfo($ch);
curl_close($ch);
return [
'ret' => false,
'errno' => $errno,
'msg' => $err,
'info' => $info,
];
}
curl_close($ch);
return $ret;
// return [
// 'ret' => true,
// 'msg' => $ret,
// ];
}
12.将内容打印到./test.txt
//信息打印到文件
function dayin($res=[]){
// 将数组转换为JSON字符串
$json = json_encode($res);
// 打开文件句柄,使用"w"模式以覆盖文件内容的方式写入文件 a追加
$file = fopen('./test.txt', 'a');
// 写入换行符
fwrite($file, "\n");
// 将JSON字符串写入文件
fwrite($file, $json);
// 关闭文件句柄
fclose($file);
}
13.二维数组里取出一列的值作为这个数组新的键
<?php
// 假设你有如下的二维数组
$data = [
['id' => 1, 'name' => 'John'],
['id' => 2, 'name' => 'Jane'],
['id' => 3, 'name' => 'Bob']
];
// 使用 array_column 函数获取二维数组中的一列值(例如,'name' 列)
$columnValues = array_column($data, 'name');
// 使用 array_map 函数将一列值作为键,与原始数组进行关联
$result = array_map(function($value) use ($columnValues) {
return array($value['name'] => $value);
}, $data);
// 打印结果
print_r($result);
?>
Array
(
[John] => Array
(
[id] => 1
[name] => John
)
[Jane] => Array
(
[id] => 2
[name] => Jane
)
[Bob] => Array
(
[id] => 3
[name] => Bob
)
)