重新认识php array_merge函数
今天因一个Bug重新审视了下array_merge()这个函数。
定义:array_merge — 合并一个或多个数组
规范:array array_merge(array $array1 [, array $…])
说明:
1. 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。
2. 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
3. 如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
这个函数在手册中有详尽示例,用途也很广且实用。
今天遇到的一个问题是手册中有警告的,只是此前没注意到,导致了一个致命的错误。如下:
PHP >= 5.0 版本,array_merge() 只接受array类型的参数。不过可以用强制转换来合并其它类型。
对于是foreach等代码产生的数组变量要注意了,要么初始化该变量为空数组,要么就在合并时做个强制转换。不然,会有大苦头吃。因此,保持一个初始化变量的习惯也是个好事。
PHP中合并数组分成两种情况
1、如果这两个数组中有相同的字符串键名:
1
2
3
4
5
6
7
8
|
<?php
$book1 = array ( 'linux' => 'linux服务器配置与管理' , 'php' => 'PHP程序设计' );
$book2 = array ( 'linux' => '服务器配置与管理' , 'jsp' => 'PHP' );
$result = array_merge ( $book1 , $book2 );
print_r( $result );
?>
|
输出为:
1
|
Array ( [linux] => 服务器配置与管理 [php] => PHP程序设计 [jsp] => PHP )
|
说明,后者将替换前者。但如果使用的是array_merge_recursive()则可保留,并作一个子数组存在。如:
1
2
3
4
5
6
7
8
|
<?php
$book1 = array ( 'linux' => 'linux服务器配置与管理' , 'php' => 'PHP程序设计' );
$book2 = array ( 'linux' => '服务器配置与管理' , 'jsp' => 'PHP' );
$result = array_merge_recursive ( $book1 , $book2 );
print_r( $result );
?>
|
输出为:
1
|
Array ( [linux] => Array ( [0] => linux服务器配置与管理 [1] => 服务器配置与管理 ) [php] => PHP程序设计 [jsp] => PHP )
|
2、如果这两个数组中有相同的数值键名:
1
2
3
4
5
6
7
8
|
<?php
$book1 = array ( 'linux服务器配置与管理' , 'PHP程序设计' );
$book2 = array ( '服务器配置与管理' , 'PHP' );
$result = array_merge ( $book1 , $book2 );
print_r( $result );
?>
|
结果是:
1
|
Array ( [0] => linux服务器配置与管理 [1] => PHP程序设计 [2] => 服务器配置与管理 [3] => PHP )
|
这时,如果数组中包含相同的数字键名,则后面的不会覆盖前面的值,而是后面的键值按顺序依次增加,附在后边。明白了吗,^_^
相关文章
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 64M VPS建站:怎样优化以提高网站加载速度? 2025-06-10
- 64M VPS建站:是否适合初学者操作和管理? 2025-06-10
- ASP.NET自助建站系统中的用户注册和登录功能定制方法 2025-06-10
- ASP.NET自助建站系统的域名绑定与解析教程 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
windows无法添加本地用户和组怎么办 windows无法添加本地用户和组的解决方案
2025-05-25 61 -
2025-05-29 102
-
2025-05-27 60
-
2025-05-29 36
-
2025-05-27 39