目录

  • 一、数组的定义与分类
    • 1.1 索引数组
    • 1.2 关联数组
    • 1.3 多维数组
  • 二、数组的基本操作
    • 2.1 数组元素的添加、删除、修改和访问
    • 2.2 数组指针的操作
  • 三、数组处理函数
    • 3.1 数组排序函数
    • 3.2 数组统计函数
    • 3.3 数组过滤与转换函数


一、数组的定义与分类

在 PHP 中,数组是一种非常重要的数据结构,它允许我们在一个变量中存储多个值,并且可以方便地对这些值进行管理和操作。数组可以分为索引数组、关联数组和多维数组,下面我们来详细了解它们的定义与分类。

1.1 索引数组

索引数组是使用数字索引来存储值的数组,索引从 0 开始依次递增。在 PHP 中,可以使用array()函数或者方括号[]来创建索引数组。例如:

// 使用array()函数创建索引数组
$fruits = array("苹果", "香蕉", "橙子");// 使用方括号创建索引数组
$numbers = [1, 2, 3, 4, 5];

访问索引数组中的元素时,只需使用对应的索引值即可。例如,要访问$fruits数组中的第一个元素,可以这样写:

echo $fruits[0]; // 输出:苹果

也可以通过循环遍历索引数组,例如使用for循环:

$fruits = array("苹果", "香蕉", "橙子");
for ($i = 0; $i < count($fruits); $i++) {echo $fruits[$i]. "<br>";
}

或者使用foreach循环:

$fruits = array("苹果", "香蕉", "橙子");
foreach ($fruits as $fruit) {echo $fruit. "<br>";
}

1.2 关联数组

关联数组与索引数组不同,它使用字符串作为索引(也称为键),而不是数字。这使得我们可以通过有意义的键名来访问数组中的值,提高了代码的可读性和维护性。在 PHP 中,定义关联数组时使用=>符号来指定键值对。例如:

// 创建关联数组
$person = array("name" => "张三","age" => 25,"city" => "北京"
);

访问关联数组中的元素时,使用对应的键名:

echo $person["name"]; // 输出:张三
echo $person["age"]; // 输出:25

同样,也可以使用foreach循环遍历关联数组:

$person = array("name" => "张三","age" => 25,"city" => "北京"
);
foreach ($person as $key => $value) {echo $key. ": ". $value. "<br>";
}

1.3 多维数组

多维数组是指数组中包含其他数组作为元素的数组。这种结构可以用来表示更加复杂的数据,例如表格数据、树状结构等。最常见的多维数组是二维数组,它可以看作是一个由行和列组成的表格。例如,下面是一个二维数组,用于存储学生的成绩:

// 定义二维数组
$scores = array(array(85, 90, 78),array(92, 88, 95),array(76, 82, 89)
);

在这个二维数组中,$scores[0]表示第一行的成绩,$scores[0][0]表示第一行第一列的成绩(即第一个学生的第一门课成绩)。访问多维数组中的元素时,需要使用多个索引值,例如:

echo $scores[1][2]; // 输出:95,表示第二个学生的第三门课成绩

对于多维数组的遍历,可以使用多层循环。例如,遍历上面的$scores数组:

$scores = array(array(85, 90, 78),array(92, 88, 95),array(76, 82, 89)
);
for ($i = 0; $i < count($scores); $i++) {for ($j = 0; $j < count($scores[$i]); $j++) {echo $scores[$i][$j]. " ";}echo "<br>";
}

也可以使用foreach循环结合is_array()函数来递归地遍历多维数组:

function printMultiArray($array) {foreach ($array as $value) {if (is_array($value)) {printMultiArray($value);} else {echo $value. " ";}}echo "<br>";
}$scores = array(array(85, 90, 78),array(92, 88, 95),array(76, 82, 89)
);
printMultiArray($scores);

通过上述介绍,我们对 PHP 中数组的定义与分类有了清晰的认识,这为后续学习数组的基本操作和处理函数打下了坚实的基础。

二、数组的基本操作

在了解了数组的定义与分类后,接下来我们学习数组的基本操作,包括数组元素的添加、删除、修改和访问,以及数组指针的操作。这些操作是我们在使用数组时最常用的,熟练掌握它们可以让我们更加灵活地处理数组数据。

2.1 数组元素的添加、删除、修改和访问

  1. 添加元素
    • 在 PHP 中,向数组添加元素有多种方法。对于索引数组,可以使用方括号[]直接添加元素,PHP 会自动为新元素分配一个合适的索引(通常是当前最大索引加 1)。例如:
$fruits = array("苹果", "香蕉");
$fruits[] = "橙子";
print_r($fruits);

上述代码中,我们先定义了一个包含 “苹果” 和 “香蕉” 的$fruits数组,然后使用$fruits[] = “橙子”;向数组末尾添加了 “橙子” 这个元素,最后使用print_r()函数输出数组内容,可以看到数组变为Array ( [0] => 苹果 [1] => 香蕉 [2] => 橙子 )。

  • 还可以使用array_push()函数向数组末尾添加一个或多个元素。array_push()函数的第一个参数是要操作的数组,后面的参数是要添加的元素。例如:
$fruits = array("苹果", "香蕉");
array_push($fruits, "草莓", "葡萄");
print_r($fruits);

这里通过array_push()函数向$fruits数组中添加了 “草莓” 和 “葡萄” 两个元素,输出的数组为Array ( [0] => 苹果 [1] => 香蕉 [2] => 草莓 [3] => 葡萄 )。

对于关联数组,添加元素时需要指定键名,通过$数组名[键名] = 值;的方式来添加。例如:

$person = array("name" => "张三");
$person["age"] = 25;
$person["city"] = "北京";
print_r($person);

此代码先定义了一个关联数组$person,只有 “name” 这个键值对,然后依次添加了 “age” 和 “city” 键值对,最终输出的数组为Array ( [name] => 张三 [age] => 25 [city] => 北京 )。

  1. 删除元素
    使用unset()函数可以删除数组中的元素。unset()函数接受一个或多个参数,每个参数是要删除的数组元素的索引或键。例如,删除索引数组中的元素:
$fruits = array("苹果", "香蕉", "橙子");
unset($fruits[1]);
print_r($fruits);

这段代码删除了$fruits数组中索引为 1 的元素(即 “香蕉”),输出的数组变为Array ( [0] => 苹果 [2] => 橙子 ),需要注意的是,使用unset()函数删除元素后,数组的索引不会自动重新排列。

对于关联数组,同样使用unset()函数根据键来删除元素:

$person = array("name" => "张三", "age" => 25, "city" => "北京");
unset($person["age"]);
print_r($person);

这里删除了$person数组中 “age” 这个键值对,输出结果为Array ( [name] => 张三 [city] => 北京 )。

  1. 修改元素
    直接通过索引或键对数组元素进行赋值,就可以修改数组中的元素。对于索引数组:
$fruits = array("苹果", "香蕉", "橙子");
$fruits[1] = "芒果";
print_r($fruits);

上述代码将$fruits数组中索引为 1 的元素 “香蕉” 修改为 “芒果”,输出数组为Array ( [0] => 苹果 [1] => 芒果 [2] => 橙子 )。

对于关联数组:

$person = array("name" => "张三", "age" => 25, "city" => "北京");
$person["age"] = 26;
print_r($person);

此代码将$person数组中 “age” 对应的值从 25 修改为 26,输出结果是Array ( [name] => 张三 [age] => 26 [city] => 北京 )。

  1. 访问元素
    通过索引或键来访问数组中的元素。对于索引数组,使用索引值即可访问对应的元素,如$fruits[0]表示访问$fruits数组中的第一个元素。对于关联数组,使用键名来访问元素,如$person[“name”]表示访问$person数组中 “name” 对应的元素。

2.2 数组指针的操作

PHP 数组有一个内部指针,它指向数组中的某个元素,通过一些函数可以操作这个指针,从而实现对数组元素的遍历等操作。常见的数组指针操作函数有current()、next()、prev()、end()和reset()等。

  • current()函数:返回数组中当前指针指向的元素的值。例如:
$fruits = array("苹果", "香蕉", "橙子");
echo current($fruits); // 输出:苹果

数组创建后,指针默认指向第一个元素,所以current($fruits)返回 “苹果”。

  • next()函数:将数组的内部指针向前移动一位,并返回移动后指针指向的元素的值。如果移动后指针超出了数组的范围,则返回false。例如:
$fruits = array("苹果", "香蕉", "橙子");
echo current($fruits). "<br>"; // 输出:苹果
echo next($fruits). "<br>"; // 输出:香蕉
echo next($fruits). "<br>"; // 输出:橙子
echo next($fruits); // 输出:(bool)false
  • prev()函数:与next()函数相反,将数组的内部指针向后移动一位,并返回移动后指针指向的元素的值。如果移动后指针超出了数组的范围,则返回false。例如:
$fruits = array("苹果", "香蕉", "橙子");
next($fruits);
next($fruits);
echo current($fruits). "<br>"; // 输出:橙子
echo prev($fruits). "<br>"; // 输出:香蕉
  • end()函数:将数组的内部指针移动到最后一个元素,并返回最后一个元素的值。例如:
$fruits = array("苹果", "香蕉", "橙子");
echo end($fruits); // 输出:橙子
  • reset()函数:将数组的内部指针重置到第一个元素,并返回第一个元素的值。在多次使用next()或prev()等函数移动指针后,如果想重新从数组开头遍历,可以使用reset()函数。例如:
$fruits = array("苹果", "香蕉", "橙子");
next($fruits);
next($fruits);
echo current($fruits). "<br>"; // 输出:橙子
reset($fruits);
echo current($fruits); // 输出:苹果

通过这些数组指针操作函数,我们可以灵活地遍历数组,按照自己的需求对数组元素进行处理。

三、数组处理函数

在 PHP 中,提供了丰富的数组处理函数,这些函数可以帮助我们更高效地对数组进行各种操作。下面将介绍数组排序函数、数组统计函数以及数组过滤与转换函数。

3.1 数组排序函数

PHP 提供了多个数组排序函数,每个函数都有其独特的用途和特点。

  • sort () 函数:用于对索引数组进行升序排序。排序后,数组的索引会重新从 0 开始依次递增。例如:
$numbers = array(5, 2, 8, 1, 9);
sort($numbers);
print_r($numbers);

上述代码中,$numbers数组初始包含 5 个元素,使用sort()函数排序后,输出结果为Array ( [0] => 1 [1] => 2 [2] => 5 [3] => 8 [4] => 9 ) ,可以看到数组元素按照从小到大的顺序排列,且索引重新分配。

  • rsort () 函数:与sort()函数相反,用于对索引数组进行降序排序,排序后索引同样会重新从 0 开始依次递增。例如:
$numbers = array(5, 2, 8, 1, 9);
rsort($numbers);
print_r($numbers);

这里$numbers数组经过rsort()函数处理后,输出结果为Array ( [0] => 9 [1] => 8 [2] => 5 [3] => 2 [4] => 1 ),数组元素按从大到小的顺序排列,索引重新生成。

  • asort () 函数:用于对关联数组按照值进行升序排序,排序后键值对的关联关系保持不变。例如:
$person = array("name" => "张三","age" => 25,"city" => "北京"
);
asort($person);
print_r($person);

运行这段代码,$person数组会根据值进行升序排序,输出结果为Array ( [age] => 25 [city] => 北京 [name] => 张三 ) ,可以看到键值对的对应关系依然存在,只是按照值的大小重新排列了顺序。

  • arsort () 函数:与asort()函数相反,对关联数组按照值进行降序排序,同时保持键值对的关联关系。例如:
$person = array("name" => "张三","age" => 25,"city" => "北京"
);
arsort($person);
print_r($person);

此时$person数组按值降序排序,输出为Array ( [name] => 张三 [city] => 北京 [age] => 25 ) 。

  • ksort () 函数:用于对关联数组按照键进行升序排序,键值对的关联关系在排序后保持不变。例如:
$person = array("name" => "张三","age" => 25,"city" => "北京"
);
ksort($person);
print_r($person);

运行结果为Array ( [age] => 25 [city] => 北京 [name] => 张三 ),数组按照键名的字母顺序(升序)进行了排序。

  • krsort () 函数:与ksort()函数相反,对关联数组按照键进行降序排序,键值对的关联关系保持不变。例如:
$person = array("name" => "张三","age" => 25,"city" => "北京"
);
krsort($person);
print_r($person);

输出结果为Array ( [name] => 张三 [city] => 北京 [age] => 25 ),数组按照键名的字母顺序(降序)进行了排序。

3.2 数组统计函数

PHP 中的数组统计函数可以帮助我们获取数组的一些统计信息,如元素个数、最大值和最小值等。

  • count () 函数:用于计算数组中的元素个数,对于多维数组,还可以通过设置参数来递归计算所有元素的总数。其基本语法为int count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] ),其中$array_or_countable是要计数的数组或实现了Countable接口的对象,$mode是可选参数,默认值COUNT_NORMAL表示只计算第一级元素,如果设置为COUNT_RECURSIVE,则递归计算所有元素。例如:
$fruits = array("苹果", "香蕉", "橙子");
echo count($fruits); // 输出:3

对于多维数组:

$nestedArray = array(array(1, 2, 3),array(4, 5),array(6)
);
echo count($nestedArray); // 输出:3,只计算第一级元素个数
echo count($nestedArray, COUNT_RECURSIVE); // 输出:6,递归计算所有元素个数
  • max () 函数:返回数组中的最大值。例如:
$numbers = array(5, 2, 8, 1, 9);
echo max($numbers); // 输出:9

如果数组中包含字符串类型的元素,max()函数会按照字符串的字典序进行比较。例如:

$strings = array("banana", "apple", "cherry");
echo max($strings); // 输出:cherry
  • min () 函数:与max()函数相反,返回数组中的最小值。例如:
$numbers = array(5, 2, 8, 1, 9);
echo min($numbers); // 输出:1

同样,对于包含字符串元素的数组,min()函数按字典序返回最小的字符串:

$strings = array("banana", "apple", "cherry");
echo min($strings); // 输出:apple

3.3 数组过滤与转换函数

  • array_filter () 函数:使用回调函数过滤数组中的元素。该函数会将数组中的每个元素传递给回调函数,如果回调函数返回true,则该元素会被保留在结果数组中;如果返回false,则该元素会被过滤掉。其语法为array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )。例如,过滤出数组中的奇数:
$numbers = array(1, 2, 3, 4, 5);
function isOdd($number) {return $number % 2 == 1;
}
$filteredNumbers = array_filter($numbers, 'isOdd');
print_r($filteredNumbers);

上述代码中,array_filter()函数使用isOdd回调函数对$numbers数组进行过滤,只有奇数元素被保留,输出结果为Array ( [0] => 1 [2] => 3 [4] => 5 )。

  • array_flip () 函数:用于交换数组中的键和值,即原来的键变为值,原来的值变为键。需要注意的是,如果数组中有重复的值,在交换后,后面的键会覆盖前面的键,因为键在数组中必须是唯一的。例如:
$fruits = array("苹果" => "red", "香蕉" => "yellow", "橙子" => "orange");
$flippedFruits = array_flip($fruits);
print_r($flippedFruits);

运行结果为Array ( [red] => 苹果 [yellow] => 香蕉 [orange] => 橙子 ) ,实现了键值的交换。如果原数组中有重复值,比如:

$colors = array("apple" => "red", "cherry" => "red");
$flippedColors = array_flip($colors);
print_r($flippedColors);

输出结果为Array ( [red] => cherry ),因为 “red” 值重复,后面的 “cherry” 键覆盖了前面的 “apple” 键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91211.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91211.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/91211.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode 字体的跟换

打开vscode 左下角输入电脑中已经有的字体&#xff1a;有想要用的可以自己进行安装刷新这样就可改变了

墨者:SQL过滤字符后手工注入漏洞测试(第3题)

1. 墨者学院&#xff1a;SQL过滤字符后手工注入漏洞测试(第3题)&#x1f680; 因为练习过太多的sql注入&#xff0c;废话不多介绍&#xff0c;我会通过围绕手动注入和工具爆破的方式达到靶场目标&#xff0c;开练&#xff01;&#xff01;&#xff01; 2. 手工注入方式&#x1…

【Spring AI实战】实现仿DeepSeek页面对话机器人(支持多模态上传)

一、前言 二、实现效果 三、代码实现 3.1 后端代码 3.2 前端代码 一、前言 Spring AI详解&#xff1a;【Spring AI详解】开启Java生态的智能应用开发新时代(附不同功能的Spring AI实战项目)-CSDN博客 二、实现效果 可上传图片或音频数据给大模型分析 三、代码实现 3.1 后…

Vue 正在热映模块

Vue 渐进式JavaScript 框架 基于Vue2的移动端项目&#xff1a;正在热映模块 目录 正在热映 数据修改 导入axios 配置反向代理 正在热映渲染 赋值数据 渲染列表 显示图片 优化列表 设置列表样式 主演 定义过滤器 使用过滤器 主演过长处理 无主演情况处理 观众评…

阿里云上进行k8s集群的配置

在阿里云容器服务Kubernetes&#xff08;ACK&#xff09;中配置集群的核心步骤可分为以下六大关键环节&#xff0c;涵盖架构设计到运维管理&#xff1a;1. 集群规划与基础配置 集群类型选择 托管版&#xff1a;Master节点由阿里云托管&#xff08;推荐生产环境&#xff09;专有…

页面性能优化

优化点解决方案效果双向绑定数量过多竞对设置单元格内部涉及双向绑定的输入组件过多&#xff0c;线上页面最多有88个该和抽屉中的编辑表格一样的组件&#xff0c;共计930个&#xff08;按每行最少6个来计算的&#xff09;双向绑定的组件&#xff0c;严重拖累页面性能。数据计算…

详细说明零拷贝

详细说明零拷贝【一】零拷贝介绍【1】说明【2】为什么需要零拷贝&#xff1f;—— 传统数据传输的问题【3】零拷贝的核心优化【4】零拷贝的实现方式&#xff08;1&#xff09;mmap&#xff08;内存映射&#xff09;&#xff08;2&#xff09;sendfile&#xff08;Linux 系统调用…

docker部署自己写的c++http服务器教程

我用的是ubuntu 22.04环境下 qt c 写的应用程序&#xff0c;是终端程序&#xff0c;不是界面&#xff0c;然后用linuxdeployqt工具将其打包成了AppImage可执行文件&#xff0c;以上是部署前的准备工作&#xff0c;需要确保AppImage可执行文件在自己的ubuntu上可以运行才能执行以…

Caffeine 缓存库的常用功能使用介绍

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

C# _列表(List<T>)_ 字典(Dictionary<TKey, TValue>)

目录 列表&#xff08;List&#xff09;特点 创建列表 RemoveAll 删除与之条件相匹配的数据 会返回删除的个数 Capacity 获取或设置列表的容量 更多方法可参照上篇文章&#xff1a;C#_ArrayList动态数组 字典&#xff08;Dictionary&#xff09;特点 定义一个字典 向字…

【实时Linux实战系列】实时网络控制与调度

在实时控制系统中&#xff0c;网络调度是确保实时数据流传输和处理不受延迟影响的关键。实时网络控制与调度技术对于工业自动化、金融交易、多媒体流等领域至关重要。通过合理设计网络调度策略&#xff0c;可以显著提高系统的实时性和可靠性。本文将介绍如何在实时控制系统中实…

Qwen3-Coder:介绍及使用 -- 超强AI编程助手

更多内容&#xff1a;XiaoJ的知识星球 目录一、Qwen3-Coder模型介绍1.预训练阶段&#xff08;Pre-Training&#xff09;2.后训练阶段&#xff08;Post-Training&#xff09;1&#xff09;Scaling Code RL: Hard to Solve, Easy to Verify2&#xff09;Scaling Long-Horizon RL二…

uniapp 如果进入页面输入框自动聚焦,此时快速返回页面或者跳转到下一个页面,输入法顶上来的页面出现半屏的黑屏问题。

如果进入页面输入框自动聚焦&#xff0c;此时快速返回页面或者跳转到下一个页面&#xff0c;输入法顶上来的页面出现半屏的黑屏问题。输入法出来后&#xff0c;设置了自动将页面顶上来的配置&#xff1a;pages.json"softinputMode": "adjustResize""g…

深入了解 Kubernetes(k8s):从概念到实践

目录 一、k8s 核心概念 二、k8s 的优势 三、k8s 架构组件 控制平面组件 节点组件 四、k8s docker 运行前后端分离项目的例子 1. 准备前端项目 2. 准备后端项目 3. 创建 k8s 部署配置文件 4. 部署应用到 k8s 集群 在当今云计算和容器化技术飞速发展的时代&#xff0c…

Android User版本默认用test-keys,如何改用release-keys

Android User版本 默认用test-keys&#xff0c; 如何改用release-keys 开发云 - 一站式云服务平台 --- build/core/Makefile | 5 1 file changed, 5 insertions() diff --git a/build/core/Makefile b/build/core/Makefile index --- a/build/core/Makefile b/build/core…

从零开始学习Dify-数据库数据可视化(五)

概述上一篇文章我们围绕 Excel 文件展开数据可视化教学&#xff0c;逐步掌握了数据导入、图表构建和 AI 智能分析。在实际业务环境中&#xff0c;很多数据并不是保存在表格中&#xff0c;而是存储于数据库系统中&#xff0c;尤其是最常见的 MySQL。本篇作为本系列的第五篇&…

使用vue2和 element-ui 做一个点餐收银台系统前端静态项目

今天给大家分享一个 关于点餐收银台的静态网站&#xff0c;最近一直在练习前端项目&#xff0c;就使用vue2和 element-ui 做了一个 这样简单的 收银台系统。先给大家看一下 做出来的样子。 因为是练习项目 所以页面功能还是比较简单的。 使用的技术是&#xff1a; 技术栈 Vu…

Spring Boot自动配置原理深度解析

Spring Boot自动配置原理深度解析 一、自动配置核心概念 1.1 什么是自动配置 Spring Boot自动配置(Auto-Configuration)是其核心特性之一&#xff0c;能够根据项目依赖自动配置Spring应用程序。例如&#xff1a; 当检测到H2数据库依赖时&#xff0c;自动配置内存数据库当存在Sp…

关于 Apache Ignite 中 Job 调度(Job Scheduling)与冲突控制(Collision Control) 的机制说明

这段内容是关于 Apache Ignite 中 Job 调度&#xff08;Job Scheduling&#xff09;与冲突控制&#xff08;Collision Control&#xff09; 的机制说明。我来为你逐段解析&#xff0c;帮助你深入理解其原理和使用方式。&#x1f50d; 一、核心概念&#xff1a;Job 调度与 Colli…

网络资源模板--基于Android Studio 实现的课程管理App

目录 一、测试环境说明 二、项目简介 三、项目演示 四、部设计详情&#xff08;部分) 登录页 首页 五、项目源码 一、测试环境说明 电脑环境 Windows 11 编写语言 JAVA 开发软件 Android Studio (2020) 开发软件只要大于等于测试版本即可(近几年官网直接下载也可…