本文实例讲述了PHP使用自定义方法实现数组合并。分享给大家供大家参考,具体如下:
在PHP中提供了强大的数组功能,对于数组的合并也提供了两个方法:array_merge 和 array_merge_recursive
但对于我们千变万化的业务来说这些内置的方法并不完全能满足我们的要求
有两个二维数组,这两个数组大部分的健名是相同的,但有些健名可能并不存在于另一个数组中,现在需要我做的是将第二个数组中所有健值复制到第一个数组中(条件是:两个数组某个健名的值是相同的情况下)
显然内置的两个方法都不能满足要求(两个方法都只是将第二个数组中的健值复制到第一个对应的健上)
?
1
2
3
4
|
$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 ));
|
可以看到array_merge只是将每个第二个数组的值复制到第一个数组上而已,显然数组一favorite.name被数组二code给覆盖了,而array_merge_recursive不会覆盖掉相同的健名但一旦两个数组健名相同则它会创建一个新数组并将两个数组中值添加到新数组中
以下是我自定义的实现方法:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
/**
* @Author: HTL
* @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)不成立<br> */
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程序设计有所帮助。
相关文章
猜你喜欢
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
- 64M VPS建站:能否支持高流量网站运行? 2025-06-10
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-05-25 66
-
2025-06-04 19
-
2025-05-27 53
-
2025-05-29 79
-
2025-05-27 99
热门评论