当前位置: 首页 > news >正文

PHP基础语法(五)

一、定义语法

1、索引数组

2、php5.4之后简化的语法

3、关联数组

4、多维数组

$colors = array("Red", "Green", "Blue");
$colors = ["Red", "Green", "Blue"];
$person = array("name" => "John", "age" => 30, "city" => "New York");
$employees = array(array("name" => "John", "age" => 30, "job" => "Developer"),array("name" => "Jane", "age" => 25, "job" => "Designer")
);

PHP数组特点:

1、可以整数下标或者字符串下标
      若数组下标均为整数,则称为索引数组。
      若数组下标均为字符串,则称为关联数组
      混合下标的话称为混合数组
2、数组元素的顺序以放入顺序为准,与下标无关
3、数字下标的增长特性:从0开始自动增长,若中间手动加入较大的下标,则后面则会从当前最大下标+1增长。

4、特殊值下标的自动转换

<?php
// 特殊下标自动转换
$arr1[false] = false;
$arr1[true] = true;
$arr1[NULL] = NULL;
var_dump($arr1); // array(3)([0]=>bool(false),[1]=>bool(true) [""]->NULL)

5、PHP数组中类型元素没有限制。
6、PHP中数组元素没有长度限制。

补充:PHP中数组是很大的数据,故会存储在堆区。

二、遍历数组

使用 foreach 循环

foreach ($array as $value) {// 执行操作,$value 是数组 $array 中的每个元素的值
}

关联数组的遍历

$person = ["name" => "John", "age" => 30, "city" => "New York"];foreach ($person as $key => $value) {echo "$key: $value <br>";
}

输出:

name: John
age: 30
city: New York

索引数组的遍历

$colors = ["Red", "Green", "Blue"];foreach ($colors as $index => $color) {echo "Index $index: $color <br>";
}

输出:

Index 0: Red
Index 1: Green
Index 2: Blue

三、数组相关函数

a、数组排序函数

1、sort():对数组进行升序排序。键值关联性被丢弃,即键名被重置为整数索引。

$arr = [3, 1, 2];
sort($arr);
print_r($arr);  // 输出:[1, 2, 3]

2、rsort():对数组进行降序排序。键值关联性同样被丢弃。

$arr = [3, 1, 2];
rsort($arr);
print_r($arr);  // 输出:[3, 2, 1]

3、asort():按值保持索引关联性的升序排序。

$arr = ['b' => 3, 'a' => 1, 'c' => 2];
asort($arr);
print_r($arr);  // 输出:['a' => 1, 'c' => 2, 'b' => 3]

4、arsort():按值保持索引关联性的降序排序。

$arr = ['b' => 3, 'a' => 1, 'c' => 2];
arsort($arr);
print_r($arr);  // 输出:['b' => 3, 'c' => 2, 'a' => 1]

5、ksort():按键名升序排序。

$arr = ['b' => 3, 'a' => 1, 'c' => 2];
ksort($arr);
print_r($arr);  // 输出:['a' => 1, 'b' => 3, 'c' => 2]

6、krsort():按键名降序排序。

$arr = ['b' => 3, 'a' => 1, 'c' => 2];
krsort($arr);
print_r($arr);  // 输出:['c' => 2, 'b' => 3, 'a' => 1]

sort()rsort() 适用于索引数组;

asort()arsort() 适用于关联数组并保持键值关联;

ksort()krsort() 则按照键名进行排序。

print_r 函数会将变量以人类可读的方式输出到浏览器或者命令行界面。对于数组,它会显示数组的键和值,并且会自动递归地显示多维数组的内容。

shuffle() 是 PHP 中用来随机打乱数组元素顺序的函数。它会随机地重新排列数组中的元素,返回一个打乱顺序后的数组,数组下标会重排。

b、数组指针函数

  1. current():

    • 返回数组中当前指针位置的元素值。
  2. key():

    • 返回数组中当前指针位置的键名。
  3. next():

    • 将数组指针向前移动一位,并返回当前元素的值。(下一个元素的值)
  4. prev()

    • 将数组指针向后移动一位,并返回当前元素的值。(上一个元素的值)
  5. reset():

    • 将数组指针重置到第一个元素,并返回第一个元素的值。
  6. end():

    • 将数组指针指向最后一个元素,并返回最后一个元素的值。
  7. each():

    • 返回当前元素的键名和值,并将指针向前移动一位。每次调用 each() 函数会返回一个包含四个元素的数组:[0] => key, [1] => value, 'key' => key, 'value' => value]。如果已经遍历到数组末尾,则返回 false

next,prev会移动指针,可能导致超出数组,此时再使用next、prev便不能再返回数组,只
能通过end/reset。

c、其他函数

  1. count():返回数组中的元素数目。

  2. array_push():将一个或多个元素压入数组的末尾。

  3. array_pop():弹出数组的最后一个元素

  4. array_shift():将数组的第一个元素移出并返回

  5. array_unshift():在数组开头插入一个或多个元素

  6. array_reverse():返回一个翻转顺序后的数组。

  7. in_array():检查数组中是否存在指定的值。

  8. array_values():返回数组中所有的值,重新建立索引。

  9. array_reverse():返回一个翻转顺序后的数组。

  10. array_keys():返回数组中所有的键名。

在 PHP 中,虽然没有内置的数据结构(如堆、栈、队列等)类似于其他编程语言(如Python或Java)提供的标准库,但可以通过数组和一些自定义实现来模拟这些数据结构的行为。

1. 栈(Stack)

栈是一种后进先出(LIFO)的数据结构

2、 队列(Queue)

队列是一种先进先出(FIFO)的数据结构

  • 队列操作:使用 array_shift 和 array_unshift,在数组的开头进行添加和移除,实现先进先出的数据结构。
  • 栈操作:使用 array_push 和 array_pop,在数组的末尾进行添加和移除,实现后进先出的数据结构。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MSPM0GXX单片机内部比较器深度解析
  • 【word转pdf】【最新版本jar】Java使用aspose-words实现word文档转pdf
  • pytest实战技巧之参数化应用
  • 在Ubuntu 14.04上安装和使用Memcache的方法
  • 奇怪的Excel单元格字体颜色格式
  • 获取后端返回的图形验证码
  • 线上语音交友平台成熟案例源码出售本地找搭子交友app软件线下陪玩系统开发服务
  • WebStorm中在Terminal终端运行脚本时报错无法加载文件进行数字签名。无法在当前系统上运行该脚本。有关运行脚本和设置执行策略的详细信息,请参阅
  • el-image预览图片点击遮盖处关闭预览
  • C++版OpenCV_03_图像增强
  • 筑牢数字防线:从微软蓝屏事件看网络安全与系统韧性建设
  • linux自动化构建工具--make/makefile
  • 学生成绩管理系统(C语言)
  • 关于使用宝兰德bes中间件进行windows部署遇到的问题——license不存在
  • Git仓库拆分和Merge
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 11111111
  • avalon2.2的VM生成过程
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Docker下部署自己的LNMP工作环境
  • E-HPC支持多队列管理和自动伸缩
  • JWT究竟是什么呢?
  • php的插入排序,通过双层for循环
  • ReactNative开发常用的三方模块
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Redis在Web项目中的应用与实践
  • Ruby 2.x 源代码分析:扩展 概述
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Terraform入门 - 3. 变更基础设施
  • 关于 Cirru Editor 存储格式
  • 机器学习中为什么要做归一化normalization
  • 前端技术周刊 2018-12-10:前端自动化测试
  • Python 之网络式编程
  • ​MySQL主从复制一致性检测
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​一些不规范的GTID使用场景
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #define用法
  • #预处理和函数的对比以及条件编译
  • (003)SlickEdit Unity的补全
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (4)事件处理——(7)简单事件(Simple events)
  • (Java入门)学生管理系统
  • (k8s)Kubernetes本地存储接入
  • (libusb) usb口自动刷新
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (算法)硬币问题
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • . Flume面试题
  • .NET 8.0 中有哪些新的变化?