数组的概述

    PHP 中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,队列以及更多可能性。因为可以用另一个 PHP 数组作为值,也可以很容易地模拟树。

    <1>所谓的数组下标可以视为资料内容在此数组中的识别名称,通常被称为数组下标。
    <2>当索引值为数值时,也代表此资料内容在数组中的储存位置。
    <3>数组中有几个索引值就被称为几维数组。
    <4>数组分类: 在PHP中有两种数组:索引数组和关联数组。 索引(indexed)数组的索引值是整数,以0开始。当通过位置来标识东西时用索引数组。 关联(associative)数组以字符串做为索引值,关联数组更像操作表。索引值为列名,用于访问列的数据。

    数组的定义
    <1>直接赋值的方式声明数组
    <2>使用array( )语言结构新建数组
    <3>使用[ ] 定义数组
    <4>多维数组的声明

    数组常用的赋值方式:
    由于 PHP 是属于弱类型数据,因此源代码中的数组并不需要经过特别的声明操作,直接将一组数值指定给某一数组元素即可。一般情况下数组的赋值有三种方式: 直接赋值方式 如:
    $a[0]=‘spam@126.com’;
    $a[1]=‘abuse@sohu.com’;
    使用array函数 如:
    $a=array(“spam@126.com “,”abuse@sohu.com”);
    使用[ ] 如: $a=[“spam@126.com “,”abuse@sohu.com”];
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    直接赋值的方式声明数组
    直接赋值格式:
    $数组变量名[索引值]=资料内容 其中索引值(下标)可以是一个字符串或一个整数。等价于整数(不以0开头)的字符串值被当作整数对待。因此,数组$array[3]与$array[‘3’]是引用相同的元素。但是$array[‘03’]引用的另外不同的元素。
    一维数组 数组中索引值(下标)只有一个的数组称为一维数组。在数组中这是最简单的,也是最常用的了。**

    使用array( )语言结构新建数组
    <1>格式: array( [key =>] value , … ) // key 可以是 integer 或者 string // value 可以是任何值
    <2>key 可以是 integer 或者 string。如果键名是一个 integer 的标准表达方法,则被解释为整数(例如 “8” 将被解释为 8,而 “08” 将被解释为 “08”)。key 中的浮点数被取整为 integer。PHP 中没有不同的数字下标和关联下标数组,数组的类型只有一种,它可以同时包含整型和字符串型的下标。 3.如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖image.png
    image.png
    多维数组的声明
    二维数组的声明
    多维数组的声明方式及规则,与一维数组相同,
    image.png
    image.png
    数组的遍历
    使用for语句循环遍历数组
    image.png
    image.png
    使用foreach语句遍历数组
    foreach循环结构:
    foreach 仅用于数组,有两种语法。
    foreach (array_expression as $value)
    …..statement
    foreach (array_expression as $key => $value)
    …..statement
    第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步
    第二种格式做同样的事,只除了当前单元的键值也会在每次循环中被赋给变量 $key。
    注: 当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。此外注意foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。
    <?php
    $a=array(10,20,30,40,50,60);
    foreach($a as $k=>$v) { echo “$k => $v
    “; }

    ?>
    image.png
    image.png
    联合使用list( )、each( )和while循环遍历数组
    array each ( array array) 返回 array 数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为 0,1,key 和 value。
    单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。 如果内部指针越过了数组的末端,则 each() 返回 FALSE。
    each() 经常和list( ) 结合使用来遍历数组。
    void list ( mixed …) 它不是真正的函数,而是语言结构。list() 用一步操作给一组变量进行赋值。
    注: list() 仅能用于数字索引的数组并假定数字索引从0开始。 在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用 each 遍历数组,必须使用reset( )。
    image.png
    image.png
    使用数组的内部指针控制函数遍历数组

    1.数组指针的控制函数 由于数组是由多笔资料集合而成,所以当程序需要运算处理其中某个索引位置的资料内容时,会由数组之中内定的指针,指向目标资料,以提供程序作正确的读取。
    下面针对数组指针控制的相关函数,作简单的说明介绍:
    2.next()、prev()、end()及 reset() 这四个函数可以控制目前数组中的指针位置。
    next()负责将指针向后移动,prev()负责将指针向前移动;end()会将指针指向数组中最后一个元素,而 reset()函数则会将目前指针无条件移至第一个索引位置。
    3.语法格式: mixed next(数组名称); mixed prev(数组名称); mixed end(数组名称); mixed reset(数组名称); mixed current(数组名称); mixed key(数组名称);

    服务器变量: $_SERVER

    $_SERVER 是一个包含诸如头信息(header)、路径(path)和脚本位置(script locations)的数组。数组的实体由 web 服务器创建。不能保证所有的服务器都能产生所有的信息;服务器可能忽略了一些信息,或者产生了一些未在下面列出的新的信息。这是一个自动全局变量。这只不过意味这它在所有的脚本中都有效。在函数或方法中不需要使用 global $_SERVER; PHP_SELF :当前正在执行脚本的文件名 DOCUMENT_ROOT :当前运行脚本所在的文档根目录 REMOTE_ADDR :正在浏览当前页面用户的 IP 地址**。

    image.png
    image.png

    环境变量:$_ENV
    在解析器运行时,这些变量从环境变量转变为 PHP 全局变量名称空间(namespace)。它们中的许多都是由 PHP 所运行的系统决定。完整的列表是不可能的。请查看系统的文档以确定其特定的环境变量。 2.这是一个自动全局变量。它在所有的脚本中都有效。在函数或方法中不需要使用 global $_ENV;

    HTTP GET变量:$_GET
    通过 HTTP GET 方法传递的变量组成的数组。是自动全局变量.
    http://localhost/login.php?name=zhangsan&id=100
    <?php
    echo “参数name的值:”.$_GET[“name”]; //zhangsan
    echo “参数id的值:”.$_GET[“id”]; //100
    ?>

    HTTP POST变量:$_POST

    通过 HTTP POST 方法传递的变量组成的数组。是自动全局变量。 与$_GET相似,只是方法不一样
    image.png
    image.png

    request变量:$_REQUEST
    此关联数组包含 $_GET,$_POST 和 $_COOKIE 中的全部内容。

    HTTP文件上传变量:$_FILES
    通过 HTTP POST 方法传递的已上传文件项目组成的数组。是自动全局变量。

    image.png
    image.png
    HTTP Cookies:$_COOKIE
    通过 HTTP cookies 传递的变量组成的数组。是自动全局变量

    Session变量:$_SESSION
    包含当前脚本中 session 变量的数组。参阅 Session 函数文档以获得更多信息。

    Global变量:$GLOBALS
    由所有已定义全局变量组成的数组。变量名就是该数组的索引
    **

    统计数组元素的个数与唯一性

    count — 计算数组中的单元数目或对象中的属性个数 语法:int count ( mixed var [, int mode] ) 如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数
    array_count_values — 统计数组中所有的值出现的次数
    语法:array array_count_values ( array input )
    array_unique — 移除数组中重复的值
    语法:array array_unique ( array array )
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    拆分、合并、分解与结合数组
    array_splice — 把数组中的一部分去掉并用其它值取代 语法:array array_splice ( array &input, int offset [, int length [, array replacement]] ) array_splice() 把 input 数组中由 offset 和 length 指定的单元去掉,如果提供了 replacement 参数,则用 replacement 数组中的单元取代。返回一个包含有被移除单元的数组。注意 input 中的数字键名不被保留。 如果 offset 为正,则从 input 数组中该值指定的偏移量开始移除。如果 offset 为负,则从 input 末尾倒数该值指定的偏移量开始移除。 如果省略 length,则移除数组中从 offset 到结尾的所有部分。 如果给出了 replacement 数组,则被移除的单元被此数组中的单元替代
    其他有用的数组处理函数
    array_rand — 从数组中随机取出一个或多个单元 shuffle — 将数组打乱
    image.png
    image.png
    image.png
    image.png