`

PHP开发笔记系列(九)- 数组(四)

阅读更多

    经过《PHP开发笔记系列(九)- 数组(一)》《PHP开发笔记系列(九)- 数组(二)》《PHP开发笔记系列(九)- 数组(三)》 三篇的关于数组的使用后,本篇《PHP开发笔记系列(九)- 数组(四)》 将把Php数组的最后一部分,数组的集合处理。


    1. 合并数组

    在平常的使用中,我们可能需要从数据库中查询两部分数据,分别是两个数组,然后融合两个数组得到一个结果。要达到这样的效果,需要用到array_merge()函数,对于数值键数组,两个数组中的元素会叠加,即使值相同,也不会覆盖前面的元素,因此返回结果的数组长度等于两个数组之和。如下:

 

file: array_merge.php
url: http://localhost:88/array/array_merge.php
<?php

    $number = array(1, 2, 3, 4, 5);

    $letter = array('a', '1', 'b', '2', 'c');
    
    $result = array_merge($number, $letter);
    
    print_r($result);

?>

 

    对于关联键数组,如果键相同,则对应的值会被后面的元素覆盖。如下:

 

file: array_merge.php
url: http://localhost:88/array/array_merge.php
<?php
    
    $student = array('s1'=>'1st student', 's2'=>'2nd student', 's3'=>'3rd student');
    
    $new_student = array('s1'=>'1st new student', 's2'=>'2nd student', 's3'=>'3rd new student');
    
    $result = array_merge($student, $new_student);
    
    print_r($result)
    
?>

 

    2. 递归追加数组

    array_merge_recursive()函数与array_merge()函数相同,不同的是前者会把键值相同的两个元素的值合并在一起,形成一个新的数组并以原有的键作为数组名。如下:

 

file: array_merge_recursive.php
url: http://localhost:88/array/array_merge_recursive.php
<?php

    $student = array('s1'=>'1st student', 's2'=>'2nd student', 's3'=>'3rd student');
    
    $new_student = array('s1'=>'1st new student', 's2'=>'2nd student', 's3'=>'3rd new student');
    
    $result1 = array_merge_recursive($student, $new_student);
    
    print_r($result1)
    
?>

 

    3. 键数组与值数组合并

    array_combine()函数可以将一个键数组与一个值数组合并,这两个数组需要长度相同,不能为空。如下:

 

file: array_combine.php
url: http://localhost:88/array/array_combine.php
<?php

    $short_name = array('MJ', 'RM', 'PP', 'MC', 'KD');

    $full_name = array('Michael Jackson', 'Rose Mary', 'Peter Pan', 'Mike chan', 'Kelvin Durant');
    
    $result = array_combine($short_name, $full_name);
    
    print_r($result);
    
?>

 

    4. 数组拆分

    array_slice()函数与array_splice()函数接受三个参数,第一个是输入数组,第二个是offset,第三个是length,用于从输入数组截取offset开始,截取length长度的元素,以数组形式返回。length可以为正数或负数。如下:

 

file: array_slice.php
url: http://localhost:88/array/array_slice.php
<?php

    $short_name = array('MJ', 'RM', 'PP', 'MC', 'KD');

    // 从第2为开始,截取2个元素
    $result = array_slice($short_name, 2, 2);
    
    print_r($result);
    
    echo "<br/>==================<br/>";

    // 若length为负数,则截取到count($short_name)-|length|位置结束
    $result1 = array_slice($short_name, 2, -1);
    
    print_r($result1);
    
?>

 

    array_splice()函数与array_slice()函数类似,不同的是前者会删除数组中从offset开始到offset+length结束的所有元素,并以数组形式返回被删除的元素。

 

file: array_splice.php
url: http://localhost:88/array/array_splice.php
<?php

    $short_name = array('MJ', 'RM', 'PP', 'MC', 'KD');

    // 从第2为开始,截取2个元素
    $result = array_splice($short_name, 2, 2);
    
    print_r($result);
    
    echo "<br/>==================<br/>";
    
    $full_name = array('Michael Jackson', 'Rose Mary', 'Peter Pan', 'Mike chan', 'Kelvin Durant');

    // 若length为负数,则截取到count($short_name)-|length|位置结束
    $result1 = array_splice($full_name, 2, -1);
    
    print_r($result1);
    
?>

 

    5. 数组交集

    array_intersect()函数返回一个保留了键的数组,这个数组只由第一个数组中出现的且在其他每个输入数组中都出现的值组成。

 

file: array_intersect.php
url: http://localhost:88/array/array_intersect.php
<?php

    $arr1 = array('MJ', 'RM', 'PP', 'MC', 'KD');
    
    $arr2 = array('MJ', 'RM', 'PP1', 'MC1', 'KD1');
    
    $arr3 = array('MJ', 'RM', 'PP2', 'MC2', 'KD2');
    
    // 比较时,只有两个元素有相同的数据类型时,才被认为相等。
    $intersect = array_intersect($arr1, $arr2, $arr3);
    
    print_r($intersect);
    
?>

 

    求关联数组的交集时,用到的array_intersect_assoc()与array_intersect()相同,只不过在考虑是会考虑数组的键。因此,只有在第一个数组中出现,且在所有其他输入数组中也出现的键/值才被返回到结果数组中。如下:

 

file: array_intersect_assoc.php
url: http://localhost:88/array?array_intersect_assoc.php
<?php

    $arr1 = array('MJ'=>'Michael Jackson', 'RM'=>'Rose Mary', 'PP'=>'Peter Pan');
    
    $arr2 = array('MJ'=>'Michael Jackson', 'ML'=>'Mary Lee', 'RM'=>'Rose Mary');
    
    // 只有键和值都相等的才会被返回
    $intersect = array_intersect_assoc($arr1, $arr2);
    
    print_r($intersect);
    
?>

 

    6. 数组差集

    array_diff()函数返回出现在第一个数组中但其他输入数组中没有的值。这个函数的功能与array_intersect()相反。

 

file: array_diff.php
url: http://localhost:88/array/array_diff.php
<?php

    $arr1 = array('MJ', 'RM', 'PP', 'MC', 'KD');
    
    $arr2 = array('MJ', 'RM', 'PP1', 'MC1', 'KD1');
    
    $arr3 = array('MJ', 'RM', 'PP2', 'MC2', 'KD2');
    
    $diff = array_diff($arr1, $arr2, $arr3);
    
    print_r($diff);
    
?>

 

    求关联数组的差集时,用到的array_diff_assoc()与array_diff()相同,只不过在考虑是会考虑数组的键。因此,只有在第一个数组中出现,且在所有其他输入数组中也出现的键/值才被返回到结果数组中。如下:

 

file: array_diff_assoc.php
url: http://localhost:88/array/array_diff_assoc.php
<?php

    $arr1 = array('MJ'=>'Michael Jackson', 'RM'=>'Rose Mary', 'PP'=>'Peter Pan');
    
    $arr2 = array('MJ'=>'Michael Jackson', 'ML'=>'Mary Lee', 'RM'=>'Rose Mary');
    
    // 只有键和值都相等的才会被返回
    $diff = array_diff_assoc($arr1, $arr2);
    
    print_r($diff);
    
?>

 

    还有其他的shuffle()函数、array_chunk()函数、array_sum()函数用得相对较少,就不再讲述。


    本文地址: http://ryan-d.iteye.com/blog/1566777

分享到:
评论

相关推荐

    PHP开发笔记系列(九)- 数组(三)

    NULL 博文链接:https://ryan-d.iteye.com/blog/1566686

    PHP开发笔记系列(九)- 数组(一)

    NULL 博文链接:https://ryan-d.iteye.com/blog/1566123

    PHP移动后端开发课堂笔记

    PHP移动后端开发课堂笔记 以下是文章结构目录: 一、软件开发及其准备 如何配置XAMPP 二、PHP基础 初识PHP 2.1 PHP标记与注释 2.1.1 PHP标记 2.1.2 注释 2.1.3 语句结束符 2.2 变量与常量 2.2.1 变量 2.2.2 常量 2.3...

    《php开发典型模块大全》读书笔记和调试源代码 第四章smarty (张迅雷闪击PHP系列)

    《php开发典型模块大全》读书笔记 第四章 smarty (张迅雷闪击PHP系列) 下载地址 http://www.smarty.net/download 测试使用的是Smarty-2.6.26\libs 公用的smarty类库和相关信息,将smarty放在服务器根目录下,配置...

    思库教育PHP零基础培训+进阶课程+PHP项目开发实战 21G PHP零基础学习视频教程.txt

    │ │ └笔记.doc │ ├ │ │ ├[思库教育]第25集 斐波纳挈数列.mp4 │ │ └[思库教育]第26集 数组的遍历.avi │ ├ │ │ ├[思库教育]第27集 猴子吃桃.avi │ │ ├[思库教育]第28集 杨辉三角.avi │ │ ├[思库...

    javascript入门笔记

    适用场合:任何小数与0 做 按位或的操作,可以快速转换为整数(并非四舍五入) 5 | 0 101 000 ==== 101 3、按位 异或 :^ 语法:a ^ b 特点:将 a 和 b 先转换为二进制,按位操作,对应位置上的两个数字,...

    最新2016云知梦WEB开发教程合集

    PHP开发特级课程 PHPCMS二次开发 PHP基础编程 PHP基础项目实战 PHP多版本集成环境之Wamp PHP无限分类 PHP经典实例 PHP面向对象 PHP面试题实战 ThinkPHP之RBAC权限把控 ThinkPHP后端框架 ThinkPHP数组改造 ThinkPHP...

    PHP对象转换为数组函数(递归方法)

    返回的是一个层次比较分明的数组对象,希望对大家有所帮助,来源WEB开发笔记(www.chhua.com)。 复制代码 代码如下: function object_to_array($obj) { $_arr = is_object($obj) ? get_object_vars($obj) : $obj; ...

    PHP循环语句笔记(foreach,list)

    最近买了本php和mysql web开发,看到数组循环语句。值得自己关注下,特此留点字迹,以便以后读阅

    JeoPHPardy:一个类似危险的游戏和记分板,用于托管 PHP 琐事游戏

    Mac OS X 小牛队谷歌浏览器(最新) PHP 5.4+ 带内置 PHP 服务器字体(自行下载、安装和许可)特征支持5类支持 5 个问题级别(例如,200、400、600、800、1000) 问题从 PHP 数组加载可以配置基本分数,以便可以...

    php json与xml序列化/反序列化

    在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记简单数组json格式序列化/反序列化 php...

    中美 IT 培训 C# Asp.net 笔记3

    针对循环、数组、类的概念、类的构建、类的使用、对象的创建、面向对象的思想、集合、排序、IO操作等知识点先后安排2或3个小型项目:1。制作一个通讯录;2。制作一个小游戏;3。教学管理系统。 通过实际项目深入理解...

Global site tag (gtag.js) - Google Analytics