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){ //循环合并旧数组 $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的用法与区别详解
这里只是总结下平时常用到的数组操作,下一章将会讲解php
中foreach()
的执行过程和遇到的问题漏洞等。
end
php数组操作之合并相同键名的值,排序,排重,去空值等相关推荐
- php指定键名排序,php二维数组指定其键名对其排序的方法
安利个小李子先 $arr=[ '2'=>'red', '5'=>'green', 'name'=>'tom' ]; $other=[ '5'=>'new red', 'name ...
- php二维数组指定其键名对其排序的方法
安利个小李子先 <?php $arr=['2'=>'red','5'=>'green','name'=>'tom' ];$other=[ '5'=>'new red', ...
- php ksort升序,php数组排序之ksort-对数组的元素键名进行升序排序
php数组排序对数组的元素键名进行升序排序并且保持索引关系,有需要的朋友可以参考一下. 这次这个函数是ksort() 函数按照键名对数组升序排序,为数组值保留原来的键. 可选的第二个参数包含附加的排序 ...
- php键值升序排列,php数组排序之ksort-对数组的元素键名进行升序排序_PHP教程
php数组排序对数组的元素键名进行升序排序并且保持索引关系,有需要的朋友可以参考一下. 这次这个函数是 ksort() 函数按照键名对数组升序排序,为数组值保留原来的键. 可选的第二个参数包含附加的排 ...
- 获取php数组的键名和值
要返回数组中的所有值,可以使用array_values()函数.该函数将忽略原始的键名,使用顺序的数字对数组重新索引.要返回一个数组的所有键,可以使用array_keys()函数.该函数返回一个包含数 ...
- php数组指定键名,查找数组中指定键名的值_PHP教程
HTML Ajax传值 输入要查找的值: 查找的结果为: //示例数组 搜索 depth $src_array = array( 'test' => '123', array( 'has' =& ...
- c# 导入Excel 存到DataTable并进行行转列操作及合并DataTable相同行的值
由于公司需要就进行研究下并转化为代码: 原Excel数据 配送センターコード 店コード 总计 L W H 9999 0951 8 55 45 60 9999 0952 8 55 45 60 9999 ...
- php 操作数组array_merge使用时数组包含数字键名的问题解决方法
问题如下: <!DOCTYPE html> <html> <body><?php $age=array("123"=>"3 ...
- php 数组Array 删除指定键名值
if(array_key_exists('keyname',$array)){ //检查数组中此键名是否存在:unset($array['keyname']); //删除后位置仍然保留,但清空了键名及 ...
最新文章
- 估计点云中的曲面法线
- java环境变量javac不能成功 win7_Java开发:Java环境搭建
- mysql查看防火墙状态命令_Linux设置允许指定端口通过防火墙centos7
- Transformer 在美团搜索排序中的实践
- Eclipse 各版本版本号代号对应一览表
- 【顶】Asp无组件生成缩略图(1)
- 计算机在线应用分为,在线计算器的分类和使用方法
- 内联函数、默认参数和函数占位参数
- python mockito arg_that_编程高阶用法–开发者高频词汇
- python gif图 ctf_从两道CTF实例看python格式化字符串漏洞
- Java实习日记(1)
- 深入浅出MySQL规范
- python用海龟画圆的代码_python海龟画圆代码
- Mini CFA 考试练习题 Microeconomics
- 文件加解密,AIDE入侵检测,扫描与抓包
- 畅购商城-添加订单实现(一)
- 《Electron 开发》 环境配置和Helloworld
- FPGA学习心得分享——交通灯(EGO1)
- 免费的地理位置信息geo-ip数据库maxmind
- 使用7z程序CLI实现基础功能