PHP 自定义方法实现数组合并
在PHP中提供了强大的数组功能,对于数组的合并也提供了两个方法:array_merge 和 array_merge_recursive
$ar1 = array("color"=> array("favorite"=>"red","name"=>"test"));
$ar2 = array("color"=> array("favorite"=>"green","code"=>"code"));
print_r (array_merge ($ar1, $ar2));
print_r(array_merge_recursive ($ar1, $ar2));

/**
* @Author: HTL
* @Email: Huangyuan413026@163.com
* @DateTime: 2016-04-21 12:01:51
* @Description: 根据指定的健名将$ar2中的所有健值复制到$ar1对应的健值中
* @Return:$ar1
*/
function array_more_merge($ar1,$ar2,$key_name){
if(
!$ar1
|| !is_array($ar1)
|| count($ar1)<=0
|| !$ar2
|| !is_array($ar2)
|| count($ar2)<=0
|| !$key_name
|| strlen($key_name)<=0)
{
return $ar1;
}
/*不能使用for进行循环,因为如果数组中的索引不是连续的则使用for可能无法正确的完成循环
如 $a =
Array(
1 => Array("id" => 1 )
,8 => Array("id" => 2 )
,4 => Array("id" => 4 )
);
该数组数为3所以只能找到[1],而[8][4]在循环中不会进行处理,因为$i <=count($a)不成立
*/
for ($i=0; $i <=count($a) ; $i++) {
print_r($a[$i]);
}
foreach ($ar1 as $i=>$items) {
foreach ($ar2 as $key=>$item) {
if($ar2[$key][$key_name]==$ar1[$i][$key_name]){
$keys = array_keys($ar2[$key]);
foreach ($keys as $name) {
$ar1[$i][$name] = $ar2[$key][$name];
}
}
}
}
return $ar1;
}
$ar1 = '{"1":{"cost":"1","id":"1","total_price":"5"},"2":{"cost":"2","id":"2","total_price":"10"},"4":{"cost":"4","id":"4","total_price":"20"}}';
$ar1 = json_decode($ar1,true);
$ar2 = '{"1":{"cost":"1","id":"1","total_price":"5"},"2":{"cost":"20","id":"2","total_price":"100"},"4":{"cost":"40","id":"4","total_price":"200"}}';
$ar2 = json_decode($ar2,true); echo "array_merge_recursive:";
print_r(array_merge_recursive($ar1,$ar2)); echo "array_merge:";
print_r(array_merge($ar1,$ar2)); echo "array_more_merge:";
print_r($this->array_more_merge($ar1,$ar2,"id")); die();

PHP 自定义方法实现数组合并的更多相关文章
- go语言:多个[]byte数组合并成一个[]byte
场景:在开发中,要将多个[]byte数组合并成一个[]byte,初步实现思路如下: 1.获取多个[]byte长度 2.构造一个二维码数组 3.循环将[]byte拷贝到二维数组中 package gst ...
- 论php数组合并
注:尽量不要在循环中操作数据库. 1.两个一维数组合并成一个一维数组 $a = array('morning','afternoon','night'); $b = array('breakfast' ...
- PHP数组合并+与array_merge的区别分析 & 对多个数组合并去重技巧
PHP中两个数组合并可以使用+或者array_merge,但之间还是有区别的,而且这些区别如果了解不清楚项目中会要命的! 主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意 ...
- JS数组键值,数组合并,
eg: var arr = [] arr.test = '测试'; arr.push(1); arr.push(2); arr.obj = '对象'; console.log(arr);// [ 1, ...
- PHP数组合并 array_merge 与 + 的差异
在PHP数组合并出过几次问题都没记住,写下来加强一点记忆 PHP数组在合并时,使用 array_merge 与 + 的差异: 1.array_merge(array $array1 [, array ...
- Python数组合并
Python数组合并 a = [1, 2] b = [3, 4] c = a + b print(c) # [1, 2, 3, 4]
- PHP数组合并的常见问题
一维数组的合并 <?php $arr1=array("a","b","c"); $arr2=array("c",& ...
- php二位数组合并
转自:http://www.cnblogs.com/losesea/archive/2013/06/14/3134900.html 题目:有以下2个二维数组 1$a=Array(0 => Arr ...
- PHP中数组合并的两种方法及区别介绍
PHP数组合并两种方法及区别 如果是关联数组,如下: 复制代码代码如下: $a = array( 'where' => 'uid=1', 'order' => 'uid', ); $b = ...
随机推荐
- spring-boot 速成(7) 集成dubbo
github上有一个开源项目spring-boot-starter-dubbo 提供了spring-boot与dubbo的集成功能,直接拿来用即可.(记得给作者点赞,以示感谢!) 下面是使用步骤,先看 ...
- Echarts学习记录——如何去掉网格线及网格区域颜色
关键属性 splitLine和splitArea,可以设置相关的属性 示例代码 <!DOCTYPE html> <html lang="en"> <h ...
- ashx文件获取$.ajax()方法发送的数据
今天在使用Jquery的ajax方法发送请求时,发现在后台中使用ashx文件无法接收到ajax方法中传递的参数,上网查了一下原因后发现了问题所在,原来是我在$.ajax方法中指明了"cont ...
- 转:iOS 越狱的原理是什么
本文的主角是一个苦逼的程序员,最近打算开始研究越狱破解,因为打算做类似一类越狱插件的东西给自己使用.所以就了解了一下越狱破解的一个原理过程. 每个手机都会有手机系统,苹果也不例外.每个手机系 ...
- C#编程(五十五)----------HashSet和SortedSet
集 饱含不重复元素的集合称为”集(set)”. .NET4包含两个集(HashSet<T>和SortedSet<T>),他们都实现ISet<T>接口.HashSet ...
- SurfaceFlinger( 226): Permission Denial: can't access SurfaceFlinger
MODIFY_PHONE_STATE permission is granted to system apps only. For your information, there are 2 type ...
- javax.servlet不存在问题的解决
产生这个问题的原因是这个包在WEB服务器里才有,J2SE中没有,应该在J2EE中才有.因此必须告诉编译器这个包的位置. 正确的解决方案如下: 1. 搜索servlet-api.jar. 这个包应该在T ...
- lucene4之后的近实时搜索实现
好久没干这块东西了,近几天须要做这个.所以又一次学了一下.首先很感谢孔浩老师,没孔浩老师的视频我也不会进入lucene的殿堂. 老师当时讲的实时搜索还是NRTManager,如今已经都变了,这个类已经 ...
- Eclipse with ADT的安装和配置
我们从安卓官方网站(https://developer.android.com/sdk/index.html#download)下载下来的eclipse是捆绑好了ADT的,所以不用自己安装插件,十分方 ...
- Easyui layout设置满屏效果
html文件: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...