热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php数组学习

java中数组的索引必须是一个数字,且声明数组的时候就必须确定数组的个数。而php就比较灵活,索引可以使数字或者字符串,并且数组的个数可以随意的改变

学习目的: 了解数组的概念
学会遍历数组(一维、二维)
掌握常用的数组操作函数

1:java中数组的索引必须是一个数字,且声明数组的时候就必须确定数组的个数。
而php就比较灵活,索引可以使数字或者字符串,并且数组的个数可以随意的改变。

2:数组的概念:数组是一个可以存储一组或一系列数值的变量(复合型变量)

3:数组的分类:索引数组(索引值为数字,以0开始)和关联数组(以字符串作为索引值)

4:常用的赋值方式:
$arr[0] = 'aa';
$arr[1] = 'bb';

或者使用array() 语言结构来赋值

$arr = array('aa', 'bb');
$arr = array(array(1, 3), array(3, 4)); 二维

【注意】 数组的下标如果是等价于整数的字符串值(但不能以0开头),则会被当作整数对待。
例如: $array[3] 与  $array['3'] 引用的是相同的一个元素,而 $array['03'] 引用的则就是另外的一个元素了。

5:数组的遍历: ①for循环  ②foreach循环  ③list each 和while 配合起来循环
foreach($arr as $key=>$value)
foreach 开始循环的时候,数组内部的指针会自动指向第一个单元。
在循环中,当前单元的键和值分别赋给 $key 和 $value,并且数组中的指针自动向下一个单元移动一位。

【注意】 foreach 所操作的是一个数组的拷贝而不是数组的本身,所以每次foreach开始执行时,数组内部的指针会自动指向第一个单元,
这就意味着在foreach 循环之前不需要使用 reset()。
自 PHP 5 起,可以很容易地通过在 $value 之前加上 & 来修改数组的单元。此方法将以引用赋值而不是拷贝一个值。

each — 返回数组中当前的(键/值)对并将数组指针向前移动一步 。键值对被返回为四个单元的数组,键名为 0,1,key 和 value。
如果内部指针越过了数组的末端,则 each() 返回 FALSE。
在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用 each 遍历数组,必须使用 reset(),使指针回到起始位置。

list — 把数组中的值赋给一些变量, list() 仅能用于数字索引的数组并假定数字索引从 0 开始。
[了解]list是从右到左的进行赋值。

$arr = array('one' ,'two' ,'three' ,'four');
while (list($key, $val) = each($arr)) {
echo "$key => $val
";
}

6:数组指针的处理函数
next  — 将数组中的内部指针向前移动一位,并且返回下一个单元的元素值。如果数组包含空的单元,或者单元的值是 0 则本函数碰到这些单元也返回 FALSE。 建议使用each
prev  — 将数组的内部指针倒回一位 (用法与next正好相反)
end   — 将 array 的内部指针移动到最后一个单元并返回其值。
reset — 将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值,如果数组为空则返回 FALSE。
current($arr) — 返回数组中的当前单元  (别名:pos) 【并不移动指针】
key($arr) — 从关联数组中取得键名

7:数组中的常用函数
count --(sizeof别名)— 计算数组中的单元数目或对象中的属性个数   int count ( mixed $var [, int $mode ] )  $var 通常都是数组类型,任何其它类型都只有一个单元。  $mode 默认值为0. 1为开启递归地对数组计数
array_count_values ( array $input ) — 统计数组中所有的值出现的次数
array_sum ( array $array ) — 计算数组中所有值的和
array_unique ( array $array ) — 移除数组中重复的值  [*新数组保留原有的下标]
array_keys( array $input [, mixed $search_value [, bool $strict ]] ) — 返回数组中所有的键名
array_values( array $input ) — 返回input 数组中所有的值并给其建立数字索引。 重复的值不做处理
in_array ( mixed $needle , array $haystack [, bool $strict ] ) — 检查数组中是否存在某个值。
如果 needle 是字符串,则比较是区分大小写的。
如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同。
array_map ( callback $callback , array $arr1 [, array $... ] )— 将回调函数作用到给定数组的单元上 ,【注意】:如果使用多个数组的话,回调函数的参数个数一定要和数组的个数相匹配。
array_chunk ( array $input , int $size [, bool $preserve_keys ] ) — 将一个数组分割成多个数组,其中每个数组的单元数目由 size 决定。最后一个数组的单元数目可能会少几个。得到的数组是一个多维数组中的单元,其索引从零开始。 $preserve_keys 保留输入数组中原来的键名 默认为false
array_merge(array $array1 [, array $array2 [, array $... ]] ) 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
【注意】如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引
比较下 $arr + $arr2  数组相加 和array_merge() 函数有什么区别。

8:了解的数组函数
array_change_key_case ( array $input [, int $case ] ) — 返回字符串键名全为小写或大写的数组。 $case  CASE_UPPER 和 CASE_LOWER(默认)
array_fill ( int $start_index , int $num , mixed $value ) — 用 value 参数的值将一个数组填充 num 个条目,键名由 start_index 参数指定的开始。
array_filter ( array $input [, callback $callback ] ) — 用回调函数过滤数组中的单元. 如果 callback 函数返回 TRUE,则 input 数组的当前值会被包含在返回的结果数组中。
数组的键名保留不变.如果没有提供 callback 函数,array_filter() 将删除 input 中所有等值为 FALSE 的元素。
array_walk()
array_flip ( array $trans ) — 交换数组中的键和值
array_key_exists ( mixed $key , array $search ) — 检查给定的键名或索引是否存在于数组中,也可以用isset().  isset() 对于数组中为 NULL 的值不会返回 TRUE,而 array_key_exists() 会。
array_search ( mixed $needle , array $haystack [, bool $strict ] )— 在数组中搜索给定的值,如果成功则返回相应的键名
array_rand ( array $input [, int $num_req ] )— 从数组中随机取出一个或多个单元

9:数组和变量之间的转换
(1) extract ( array $var_array [, int $extract_type [, string $prefix ]] )
将var_array数组中的键名当作变量名,值作为变量的值。
对每个键/值对都会在当前的页面中建立变量,并受到 extract_type 和 prefix 参数的影响。
如果带操作的数组时索引数组的话,如果把键名转换为变量的话,则都是一些不合法的变量(变量不能以数字开始),因此就需要使用第二、三个参数
EXTR_OVERWRITE       如果有冲突,覆盖已有的变量。
EXTR_SKIP            如果有冲突,不覆盖已有的变量。
EXTR_PREFIX_SAME     如果有冲突,在变量名前加上前缀 prefix 。
EXTR_PREFIX_ALL      给所有变量名加上前缀 prefix 。自 PHP 4.0.5 起这也包括了对数字索引的处理。
EXTR_PREFIX_INVALID  仅在非法/数字的变量名前加上前缀 prefix 。本标记是 PHP 4.0.5 新加的。
EXTR_IF_EXISTS       仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。可以用在已经定义了一组合法的变量,然后要从一个数组例如 $_REQUEST 中提取值覆盖这些变量的场合。本标记是 PHP 4.2.0 新加的。
EXTR_PREFIX_IF_EXISTS 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。本标记是 PHP 4.2.0 新加的。
EXTR_REFS            将变量作为引用提取。这有力地表明了导入的变量仍然引用了 var_array 参数的值。可以单独使用这个标志或者在 extract_type 中用 OR 与其它任何标志结合使用。本标记是 PHP 4.3.0 新加的。
(2) compact ( mixed $varname [, mixed $... ] ) 建立一个数组,包括变量名和它们的值,如果参数中的字符串对应的变量不存在,则忽略掉。

10:数组与字符串之间的转换
(1)array  explode ( string $separator , string $string [, int $limit ] )  使用一个分隔字符来分隔一个字符串。
$limit 表示分隔为数组的单元个数,而最后那个单元将包含 string 的剩余部分。
如果 limit 参数是负数,则返回除了最后的 limit 个元素外的所有元素。此特性是 PHP 5.1.0 中新增的。

(2)string implode ( string $glue , array $arr )  使用一个连接符将数组中的每个单元连接为一个字符串。
$glue 和 $arr 的位置可以互换。
join 为 implode 的别名

11:数组和栈
数组可以做栈使用,栈底指向数组的第一个元素,栈顶指向数组中的最后一个元素。
对栈的主要操作有两种:即入栈 和 出栈

(1)入栈
int array_push ( array &$array , mixed $var [, mixed $... ] ) — 将一个或多个单元压入数组的末尾(入栈).返回值:新数组的单元总数. 类似于 $arr[] = $var; (推荐使用这种方式)
int array_unshift ( array &$array , mixed $var [, mixed $... ] ) — 将传入的单元插入到 array 数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。

(2)出栈
array_pop( array &$array ) —  弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。如果 array 为空(或者不是数组)将返回 NULL。
array_shift ( array &$array ) —  将 array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。如果 array 为空(或者不是数组),则返回 NULL。

12:数组的排序
(1)正向排序
sort ( array &$array [, int $sort_flags ] ) — 对数组按照值排序,当本函数结束时数组单元将被从最低到最高重新安排。
asort ( array &$array [, int $sort_flags ] ) — 对数组进行排序并保持索引关系(其他的同sort)
ksort ( array &$array [, int $sort_flags ] ) — 对数组按照键名排序,保留键名到数据的关联。(本函数主要用于关联数组)

(2)反向排序
rsort( array &$array [, int $sort_flags ] ) — 对数组逆向排序,本函数对数组进行逆向排序(最高到最低)。
arsort( array &$array [, int $sort_flags ] ) — 对数组进行逆向排序并保持索引关系
krsort( array &$array [, int $sort_flags ] )— 对数组按照键名逆向排序,保留键名到数据的关联。主要用于关联数组。

(3)【了解】用户自定义排序
usort ( array &$array , callback $cmp_function ) — 使用用户自定义的比较函数对数组中的值进行排序
uksort ( array &$array , callback $cmp_function ) — 使用用户自定义的比较函数对数组中的键名进行排序
uasort ( array &$array , callback $cmp_function ) — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联


推荐阅读
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
  • 如何清除Chrome浏览器地址栏的特定历史记录
    在使用Chrome浏览器时,你可能会发现地址栏保存了大量浏览记录。有时你可能希望删除某些特定的历史记录而不影响其他数据。本文将详细介绍如何单独删除地址栏中的特定记录以及批量清除所有历史记录的方法。 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • 本文详细介绍了如何在PHP中实现基于概率的随机抽奖功能。通过实例代码,解释了抽奖逻辑、奖品设置及结果统计的方法。适合PHP开发者参考学习。 ... [详细]
  • 本文对宋代词人朱雍的《迷神引》进行翻译和赏析,深入探讨其词作的艺术特色与情感表达。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 本文介绍如何使用PHP在WordPress中根据分类类别ID或名称获取所有相关文章,提供详细的方法和代码示例。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 本文详细介绍了如何使用 PHP 接收并处理微信支付的回调结果,确保支付通知能够被正确接收和响应。 ... [详细]
  • 小编给大家分享一下如何移除URL中的index.php,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收 ... [详细]
  • 本文详细介绍了如何在PHP中删除数组中的指定元素、第一个元素和最后一个元素,并提供了具体的代码示例和相关函数的使用说明。 ... [详细]
  • 本文详细解析了汉字‘犐’的基本字义及其在古代文献中的应用,旨在为读者提供全面而深入的理解。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
author-avatar
琴瑟_0203
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有