热门标签 | 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 ) — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联


推荐阅读
  • LeetCode 540:有序数组中的唯一元素
    来源:力扣(LeetCode),链接:https://leetcode-cn.com/problems/single-element-in-a-sorted-array。题目要求在仅包含整数的有序数组中,找到唯一出现一次的元素,并确保算法的时间复杂度为 O(log n) 和空间复杂度为 O(1)。 ... [详细]
  • 如何在Faceu激萌中设置和使用妆容切换特效?
    本文将详细介绍如何在Faceu激萌应用中设置和使用妆容切换特效,帮助用户轻松实现创意拍摄。无论是新手还是有经验的用户,都能从中受益。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 探讨一个老旧 PHP MySQL 系统中,时间戳字段不定期出现异常值的问题及其可能原因。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 郑州大学在211高校中的地位与排名解析
    本文将详细解读郑州大学作为一所位于河南省的211和双一流B类高校,在全国211高校中的地位与排名,帮助高三学生更好地了解这所知名学府的实力与发展前景。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 优化ASM字节码操作:简化类转换与移除冗余指令
    本文探讨如何利用ASM框架进行字节码操作,以优化现有类的转换过程,简化复杂的转换逻辑,并移除不必要的加0操作。通过这些技术手段,可以显著提升代码性能和可维护性。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 电子元件封装库:三极管、MOS管及部分LDO(含3D模型)
    本资源汇集了常用的插件和贴片三极管、MOS管以及部分LDO的封装,涵盖TO和SOT系列。所有封装均配有高质量的3D模型,共计96种,满足日常设计需求。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
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社区 版权所有