php数组操作之合并相同键名的值,排序,排重,去空值等

一、前言

      数组操作是咱们在编程时候经常遇到的,只是数组函数有点多,用到的时候难免会想不起来。特别是针对多维数组的操作,有的时候用自带的数组函数真的很方便,可以避免多次的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这种的,则无法使用该函数,博主的数组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、键名从0开始排序

$arr = array_merge($arr);

      这个需求首选array_merge(),虽然这个函数本意也是合并两个数组,但是当我们只传入一个参数的时候,数组的key会从0开始排序,十分好用。

2、数组按照键名顺序排序

ksort($arr);  //返回的是bool,但此时的数组已经按照key值排序了

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的用法与区别详解

这里只是总结下平时常用到的数组操作,下一章将会讲解phpforeach()的执行过程和遇到的问题漏洞等。

end

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁柱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值