常用的一些字符串和数组的处理操作
实例1 表单提交批量二级域名,每个域名占一行,需要获取每个域名的子域名,并返回处理后的数组
前端:数据格式需要每行一个域名,严格按照格式提交数据
后端php:
//把字符串按照换行符分割成数组,每个元素对应一个域名
$d_arr = explode("\n",$_POST['domains'] );//注意\n需要双引号才能解析
//分离子域名也就是把第一个.符号和前面的字符用空字符替换掉。
//最常见的方法就是循环出来,在做字符替换如下
$t1 = microtime(true);//当前微妙级时间,单位是秒
$ds = [];
//法1
foreach($d_arr as $d){
$ds[] = str_replace(explode(".",$d)[0],'',$d);
}
//法2
$ds = preg_filter('/^\w+\./','',$d_arr);//用正则搜索并替换,如果是数组,返回的也是数组,并且正则也会针对每个数组元素进行匹配。
$ds = preg_replace('/^\w+\./','',$d_arr);//用正则搜索并替换,如果是数组,返回的也是数组
//这两个函数作用相同,区别是返回值,preg_filter只有在匹配成功才会返回替换后的值
而preg_replace匹配成功返回替换后的值,匹配失败则返回原数据,出现错误返回null
$t2 = microtime(true);//当前微妙级时间,单位是秒
$t =number_format( $t2 - $t1,6);//执行完成后消耗的时间。
echo '程序消耗时间为'.$t.' s'.',消耗内存:'.memory_get_usage()/1024.'kb';
//memory_get_usage — 返回分配给 PHP 的内存量
经过程序执行时间对比发现使用php内置函数preg_replace和preg_filter速度是循环处理的十几倍。所以在php中要尽量使用内置函数代替循环
实例2 过滤指定数据
//待处理数剧,过滤出score=100的条目
$arr = '[{"id":1,"score":100},{"id":2,"score":50},{"id":3,"score":70},{"id":4,"score":100},{"id":5,"score":100}]';
法1:循环查找,性能比较差,不推荐
法2:使用内置函数array_filter处理,该函数通过回调函数来过滤数据,具体如下
$arrs = json_decode($arr,1);
$rs = array_filter($arrs,'filter');//通过回调函数过滤数据,默认回调函数参数就是数组元素的值,也可以根据该函数第三个参数指定不同的传参方式
ARRAY_FILTER_USE_KEY - callback接受键名作为的唯一参数
ARRAY_FILTER_USE_BOTH - callback同时接受键名和键值
array_multisort($rs); //对数组重新排序
function filter($arr){
if(is_array($arr) && $arr['score'] == 100){
return 1;
}
}
实例3 数组去重
-
array_unique去重
-
array_flip去重
array_flip :交换数组中的键和值 $arr [1,2,3,2,1,5]; $flip1 = array_flip($arr);//键值调换,由于键不能有重复值,会覆盖,所以此时已经去重了; $uniq = array_keys($filip);//获取去重后的数组 $uniq2 = array_flip($flip);//同上。