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

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)
100%
订阅 回复
踩一下
(0)
100%
» 郑重声明:本文由mpxq168发布,所有内容仅代表个人观点。版权归恒富网mpxq168共有,欢迎转载, 但未经作者同意必须保留此段声明,并给出文章连接,否则保留追究法律责任的权利! 如果本文侵犯了您的权益,请留言。

目前有 0 条留言 其中:访客:0 条, 博主:0 条

给我留言

您必须 [ 登录 ] 才能发表留言!