一、前言

数组操作是咱们在编程时候经常遇到的,只是数组函数有点多,用到的时候难免会想不起来。特别是针对多维数组的操作,有的时候用自带的数组函数真的很方便,可以避免多次的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){    //循环合并旧数组 $serverDataforeach($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

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

  1. php指定键名排序,php二维数组指定其键名对其排序的方法

    安利个小李子先 $arr=[ '2'=>'red', '5'=>'green', 'name'=>'tom' ]; $other=[ '5'=>'new red', 'name ...

  2. php二维数组指定其键名对其排序的方法

    安利个小李子先 <?php $arr=['2'=>'red','5'=>'green','name'=>'tom' ];$other=[ '5'=>'new red', ...

  3. php ksort升序,php数组排序之ksort-对数组的元素键名进行升序排序

    php数组排序对数组的元素键名进行升序排序并且保持索引关系,有需要的朋友可以参考一下. 这次这个函数是ksort() 函数按照键名对数组升序排序,为数组值保留原来的键. 可选的第二个参数包含附加的排序 ...

  4. php键值升序排列,php数组排序之ksort-对数组的元素键名进行升序排序_PHP教程

    php数组排序对数组的元素键名进行升序排序并且保持索引关系,有需要的朋友可以参考一下. 这次这个函数是 ksort() 函数按照键名对数组升序排序,为数组值保留原来的键. 可选的第二个参数包含附加的排 ...

  5. 获取php数组的键名和值

    要返回数组中的所有值,可以使用array_values()函数.该函数将忽略原始的键名,使用顺序的数字对数组重新索引.要返回一个数组的所有键,可以使用array_keys()函数.该函数返回一个包含数 ...

  6. php数组指定键名,查找数组中指定键名的值_PHP教程

    HTML Ajax传值 输入要查找的值: 查找的结果为: //示例数组 搜索 depth $src_array = array( 'test' => '123', array( 'has' =& ...

  7. c# 导入Excel 存到DataTable并进行行转列操作及合并DataTable相同行的值

    由于公司需要就进行研究下并转化为代码: 原Excel数据 配送センターコード 店コード 总计 L W H 9999 0951 8 55 45 60 9999 0952 8 55 45 60 9999 ...

  8. php 操作数组array_merge使用时数组包含数字键名的问题解决方法

    问题如下: <!DOCTYPE html> <html> <body><?php $age=array("123"=>"3 ...

  9. php 数组Array 删除指定键名值

    if(array_key_exists('keyname',$array)){ //检查数组中此键名是否存在:unset($array['keyname']); //删除后位置仍然保留,但清空了键名及 ...

最新文章

  1. 估计点云中的曲面法线
  2. java环境变量javac不能成功 win7_Java开发:Java环境搭建
  3. mysql查看防火墙状态命令_Linux设置允许指定端口通过防火墙centos7
  4. Transformer 在美团搜索排序中的实践
  5. Eclipse 各版本版本号代号对应一览表
  6. 【顶】Asp无组件生成缩略图(1)
  7. 计算机在线应用分为,在线计算器的分类和使用方法
  8. 内联函数、默认参数和函数占位参数
  9. python mockito arg_that_编程高阶用法–开发者高频词汇
  10. python gif图 ctf_从两道CTF实例看python格式化字符串漏洞
  11. Java实习日记(1)
  12. 深入浅出MySQL规范
  13. python用海龟画圆的代码_python海龟画圆代码
  14. Mini CFA 考试练习题 Microeconomics
  15. 文件加解密,AIDE入侵检测,扫描与抓包
  16. 畅购商城-添加订单实现(一)
  17. 《Electron 开发》 环境配置和Helloworld
  18. FPGA学习心得分享——交通灯(EGO1)
  19. 免费的地理位置信息geo-ip数据库maxmind
  20. 使用7z程序CLI实现基础功能

热门文章

  1. mysql oracle查询速度慢_oracle查看执行最慢与查询次数最多的sql语句
  2. 空洞卷积aspp 学习笔记
  3. python 矩形补正方形
  4. JS 事件冒泡和事件捕获
  5. torch.topk
  6. map/set iterator not dereferencable
  7. 结构体在多线程中用法
  8. python数组中变化最大的值
  9. Android图像处理整理
  10. Laravel-5.1验证码mews captcha