php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: php 视频教程
查看: 463|回复: 0

3、php数组

[复制链接]

61

主题

61

帖子

426

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
426
发表于 2021-5-2 22:03:41 | 显示全部楼层 |阅读模式
[TOC]
## 数组 ##
### 作用 ###
- 管理和操作一组变量, 成批处理
- 存储任意长度、任意类型的数据
- 可以完成其他语言的数据结构功能
### 分类 ###
- 按维数分: 一维数组、二维数组、多维数组
- 按类型分: 索引数组(下标为顺序整数)、关联数组(下标为字符串)
### 声明 ###
- 直接为数组元素赋值: $数组名[索引] = 值;
> - 如果索引省略, 默认从 0 开始;如果给出索引下标, 下一个元素的索引就从最大的索引+1开始
> - 赋值时对已经赋过值的元素再次赋值, 则会覆盖之前的值
> + 声明数组时, 既有索引数组又有关联数组, 不互相影响, 索引依旧默认从 0 开始
- 使用 array() 函数: $数组名=array(值1, 值2, 值3...);
> - 默认声明的是索引数组, 如果要改变下标, 则使用 $数组名=array(索引1=>值1, 索引2=>值2...);
> - 如果要声明关联数组, 则修改为 $数组名=array("键1"=>值1, "键2"=>值2...);
- 使用其他函数, 如读取所有参数函数
- 如果数组中的元素是数组, 那么就变成二维数组了
## 数组的遍历 ###
### for 循环 ###
只能遍历下标连续的索引数组, 局限性大, 使用较少
### foreach 循环 ###
- 语法:

----------
        foreach (数组变量 as 值变量)
        {
                循环体;
        }
        foreach (数组变量 as 下标变量 => 值变量)
        {
                循环体;
        }
- 循环次数由数组的元素个数决定, 每次循环都会将数组中的元素分别赋值给值变量, 遍历多维数组就写嵌套
### 组合遍历 ###
#### each() ####
以数组为参数, 返回由数组的**下标和值**组成的数组, 默认当前元素是第一个元素, 每执行一次, 当前元素向后移动, 如果是最后一个参数, 移动后返回 false。使用 each() - while() 即可遍历
#### list() ####
将数组转化为变量, 函数的参数个数要和数组中的元素个数相同, 函数会将数组的元素赋值给对应的参数, 只能接受索引数组, 不能接受关联数组, **遇到关联数组就跳过**
#### 组合输出 ####
组合遍历时, 用 each() 取出数组, 用 list() 转化成变量, 再用 while() 输出。比较复杂, 但似乎效率会高一些, 知道就行。循环遍历数组时需要在每次遍历完后将指针移回第一个元素
### PHP 预定义数组 ###
- 又叫自动全局变量、超全局数组
- 特点:
> - 包含了来自 WEB 服务器、客户端、运行环境、用户输入的数据
> - 在全局范围内生效, 任何文件任何 <?php  ?> 标签对中均可使用
> - 用户不能自定义这些数组
> - 在函数中可以直接使用
- 常见的超全局数组

----------
        $_GET: 存储通过 GET 方式提交的表单数据
        $_POST: 存储通过 POST 方式提交的表单数据
        $_REQUEST: 存储 $_GET、$_POST、$_COOKIE 提交的数据, 速度较慢、易被攻击, 尽量不使用
        $_COOKIE: 会话控制
        $_SESSION: 会话控制
        $_ENV: 存储 PHP 所在服务器的环境相关信息, 如 Apache
        $_SERVER: 包含诸如头信息、路径、脚本位置的数组, 可用 foreach() 遍历
        $GLOBALS: 只要是当前脚本中全局变量都存在这里
## 指针控制数组相关函数 ##

----------
        reset(数组名)。数组指针指向第一个元素
        end(数组名)。数组指针指向最后一个元素
        next(数组名)。数组指针指向下一个元素
        prew(数组名)。数组指针指向上一个元素
        current(数组名)。取数组当前元素
        key(数组名)。取数组当前下标
## 数组处理函数 ##
### 关联数组操作 ###

----------
        array_values(数组): 取出关联数组的值组成新的索引数组
        array_keys(数组): 取出关联数组的下标组成新的索引数组
        in_array(值, 数组): 搜索数组中某个值是否存在
        array_key_exists(键, 数组): 搜索数组中某个键是否存在
        array_flip(数组): 该数组键值互换
        array_reverse(): 返回元素顺序反转后的数组, 不改变键值对的对应关系
### 统计数组元素的个数和唯一性 ###

----------
        count(数组): 返回数组长度
        array_count_values(数组): 统计数组中所有值出现的次数。返回一个数组, 用原数组的值为键, 出现次数为值。
        array_unique(数组): 移除重复元素, 返回没有重复值的数组
### 使用回调函数处理数组 ###

----------
        array_filter(数组, 回调函数): 用回调函数过滤数组中的元素, 回调函数必须是**变量函数或者是函数名**, 使用函数名作为回调函数时, 需要将函数名加上引号
        array_walk(数组, 回调函数): 依次将数组中的每个成员用回调函数处理, 不会将处理结果返回, 只会返回执行结果, 即true/false
        array_map(): 将回调函数作用在指定元素上
        回调函数说明: 回调函数是处理某个元素的, 所以需要有一个参数, 注意看有没有返回值
### 数组排序 ###
#### 简单排序 ####

----------
        sort(数组[,  比较类型]): 将数组的值取出, 升序排序后生成索引数组替换原数组, 原有的键值对关联被破坏
        rsort(数组[, 比较类型]): 将数组的值取出, 降序排序后生成索引数组替换原数组, 原有的键值对关联被破坏
#### 根据键名排序 ####

----------
        ksort(数组[, 比较类型]): 根据键将数组升序排序, 不改变原有的键值对关联
        krsort(数组[, 比较类型]): 根据键将数组降序排序, 不改变原有的键值对关联
#### 根据值排序 ####

----------
        asort(数组[, 比较类型]): 根据值将数组升序排序, 不改变原有的键值对关联
        arsort(数组[, 比较类型]): 根据值将数组降序排序, 不改变原有的键值对关联
#### 根据自然数排序法排序 ####

----------
        natsort(数组): 将数组按照认知, 升序排序, 区分大小写, 简单排序则是按照首位数字/字母进行排序, 即 2 比 11 大;自然排序则是 11 比 2 大
        natcasesort(数组): 将数组按照认知, 升序排序, 不区分大小写
        natrsort(数组): 将数组按照认知, 降序排序, 区分大小写
        natcasersort(数组): 将数组按照认知, 降序排序, 不区分大小写
#### 根据用户自定义方法排序 ####

----------
        usort(数组, 回调函数): 使用自定义比较函数排序, 改变原有的键值对关联
        uasort(数组, 回调函数): 使用自定义比较函数按值排序, 不改变原有的键值对关联
        uksort(数组, 回调函数): 使用自定义比较函数按键排序, 不改变原有的键值对关联
关于回调函数的说明: 回调函数的作用是比较当前参数和下一个参数的大小, 所以会接收 2 个参数, 根据返回值为0、1、-1确定大小, > 返回 1, < 返回 -1, = 返回 0
### 数组的拆分、连接、合并、分解

----------
        array_slice(数组, 起始元素下标[, 取出元素个数][, 是否生成保留原数组关联]): 从数组中取出一段数据
        array_splice(数组, 起始元素下标[, 移除元素个数][, 替换元素所在数组]): 批量删除元素或替换元素, 返回被删除/替换的元素, 会更改原数组
        array_combine(数组1, 数组2): 合并两个数组, 第一个数组为键, 第二个数组为值
        array_merge(数组1, 数组2): 合并两个数组, 重新建立数组索引
        array_intersect(数组1, 数组2): 取两个数组的交集(相同项), 新数组的索引按照 数组1 的索引, 即 数组1 不会改变关联
        array_diff(数组1, 数组2): 取两个数组的差集(不同项), 新数组的索引按照 数组1 的索引, 即 数组1 不会改变关联
### 数据结构 ###

----------
        array_push(数组名, 值): 在数组尾部增加元素, 使用 "$数组名[] = 值" 也是在数组尾部增加元素
        array_pop(数组名): 移除最后一个元素
        array_unshift(数组名, 值): 将数据添加到数组头部
        array_shift(数组名): 移除第一个元素
        unset(): 删除任意一个数据
### 其他 ###

----------
        array_rand(数组, 取出下标个数): 从数组中随机取一个或多个元素的下标
        shuffle(数组): 将数组随机排序
        array_sum(): 求数组所有元素之和, 如果是字符串数组不会按 ASCII 转码, 而是都为 0
        range(): 建立一个包含指定范围的数组, 比如1-10: range(1,10);
## 数组运算符 ##

----------
        "+": 连接两个数组, 具有相同键的元素, 保留先出现的, 后出现的数据抛弃
        "==": 如果两个数组变量具有相同的键值对则为 true
        "===": 如果两个数组变量具有相同的键值对且顺序和类型都相同则为 true
        "!=": 如果两个数组变量不等则为 true
        "<>": 同 "!="
        "!==": 如果两个数组变量不全等则为 true



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|php中文网 | cnphp.com

GMT+8, 2021-6-25 21:12 , Processed in 0.027010 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表