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.根据两个地址的经纬度计算距离
根据经纬度算距离,返回结果单位是公里,先纬度,后经度
function getDistance($lat1, $lng1, $lat2, $lng2)
{
$EARTH_RADIUS = 6378.137;
$radLat1 = rad($lat1);
$radLat2 = rad($lat2);
$a = $radLat1 - $radLat2;
$b = rad($lng1) - rad($lng2);
$s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2)));
$s = $s * $EARTH_RADIUS;
$s = round($s * 10000) / 10000;
return $s;
}
function rad($d)
{
return $d * M_PI / 180.0;
}