• 技术文章 >后端开发 >php教程

    重新认识php array_merge函数_PHP

    2016-05-31 19:30:20原创299
    重新认识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、如果这两个数组中有相同的字符串键名:

    <?php
     
     $book1 = array('linux'=>'linux服务器配置与管理','php'=>'PHP程序设计');
     $book2 = array('linux'=>'服务器配置与管理','jsp'=>'PHP'); 
     
     $result = array_merge($book1,$book2);
     print_r($result);
    ?>
    

    输出为:

    Array ( [linux] => 服务器配置与管理 [php] => PHP程序设计 [jsp] => PHP )
    


    说明,后者将替换前者。但如果使用的是array_merge_recursive()则可保留,并作一个子数组存在。如:

    <?php
     
     $book1 = array('linux'=>'linux服务器配置与管理','php'=>'PHP程序设计');
     $book2 = array('linux'=>'服务器配置与管理','jsp'=>'PHP'); 
     
     $result = array_merge_recursive($book1,$book2);
     print_r($result);
    ?>
    

    输出为:

    Array ( [linux] => Array ( [0] => linux服务器配置与管理 [1] => 服务器配置与管理 ) [php] => PHP程序设计 [jsp] => PHP )
    


    2、如果这两个数组中有相同的数值键名:

    <?php
     
     $book1 = array('linux服务器配置与管理','PHP程序设计');
     $book2 = array('服务器配置与管理','PHP'); 
     
     $result = array_merge($book1,$book2);
     print_r($result);
    ?>
    

    结果是:

    Array ( [0] => linux服务器配置与管理 [1] => PHP程序设计 [2] => 服务器配置与管理 [3] => PHP )
    


    这时,如果数组中包含相同的数字键名,则后面的不会覆盖前面的值,而是后面的键值按顺序依次增加,附在后边。明白了吗,^_^

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php array_merge
    上一篇:使用YUI+Ant 实现JS CSS压缩_PHP 下一篇:PHP实现利用MySQL保存session的方法_PHP
    php培训_php实战培训【立即报名】-php中文网第20期

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 整理总结nginx、php-fpm和mysql等的权限划分• PHP表单及印证 • 这么子的表 如果做无限分类应该怎样写 • mysql 正则查询信息,该如何处理 • 【转】php 软件工程师
    1/1

    PHP中文网