记住用户名密码
一、前言
数组操作是咱们在编程时候经常遇到的,只是数组函数有点多,用到的时候难免会想不起来。特别是针对多维数组的操作,有的时候用自带的数组函数真的很方便,可以避免多次的foreach循环,这里记录一下一些常用的数组函数,下次遇到相关问题直接看博客就好了。
二、二维数组合并相同键名(key)的键值
1、php的array_merge_recursive()函数
百度的时候首先出来的就是这个函数,这个函数把一个或多个数组合并为一个数组。并且不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组。刚好我们的需求是希望合并数组,相同键名的部分,键值相加,那么就可以用这个函数,把相同键名的组成一个新数组,然后循环累加。示例:
$a1=array("a"=>"1","b"=>"2");
$a2=array("c"=>"3","b"=>"4");
$arr = array_merge_recursive($a1,$a2); //Array ( [a] => 1 [b] => Array ( [0] => 2 [1] => 4 ) [c] => 3 )
$new_arr = [];
foreach($arr as $key=>$val){
if(is_array($val)){
foreach($val as $k1=>$v1){
$new_arr[$key] +=$v1;
}
}else{
$new_arr[$key] = $val;
}
}
var_dump($new_arr);
//array(3) {
// ["a"]=>
// string(1) "1"
// ["b"]=>
// int(6) //合并后的值
// ["c"]=>
// string(1) "3"
//}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
函数问题: 只不过这个函数要求键名必须是字符串形式的。如果键名是整型,类似于1,2,3这种的,则无法使用该函数,博主的数组key值是整型的,因此没办法使用这个函数咯。
2、循环计算赋值
$newServer = []; //新数组
foreach($serverData as $k=>$v){ //循环合并旧数组 $serverData
foreach($v as $k1=>$v1){
if(!isset($newServer[$k1])){
$newServer[$k1] = $v1;
}else{
$newServer[$k1] += $v1;
}
}
1
2
3
4
5
6
7
8
9
这种方式博主经常忘记使用,但是通过这种方式获取新数组的速度极快,代码也比较简便,推荐使用。
三、数组的排序,排重,去除空数组等
1、键名从0开始排序
$arr = array_merge($arr);
1
这个需求首选array_merge(),虽然这个函数本意也是合并两个数组,但是当我们只传入一个参数的时候,数组的key会从0开始排序,十分好用。
2、数组按照键名顺序排序
ksort($arr); //返回的是bool,但此时的数组已经按照key值排序了
1
3、一维数组去重神器:array_flip
示例:
$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"); $result=array_flip($a1); print_r($result); Array ( [red] => a [green] => b [blue] => c [yellow] => d )
通过转换键名和键值,我们把原来的键值当做键名来新建数组,由于键名是不能重复的,所以也达到了去重的目的,这比起循环对比去重要方便太多了。
4、数组除去空值
简单数组首选array_filter(),可以去除数组中的空值,包括"",false等,适合简单的运算,比foreach方便些。如果是复杂的运算,那还是优先选择foreach好一些。
还有一种是通过array_map()来去除空值等,本质就是自定义一些方法,然后数组调用该方法去完成我们想要的操作,参考:
array_map与array_walk的用法与区别详解
这里只是总结下平时常用到的数组操作,下一章将会讲解php中foreach()的执行过程和遇到的问题漏洞等。
end
目前有 0 条留言 其中:访客:0 条, 博主:0 条