php学习笔记05:数组
$变量=array(元素1,元素2,元素3...);//这种方式系统自动赋予数字下标PHP数组,从0开始
2、使用中括号包裹数据,格式为:
$变量=[元素1,元素
数组 数组的定义 1、使用array关键字,格式为: $变量=array(元素1,元素2,元素3...);//这种方式系统自动赋予数字下标PHP数组,从0开始 2、使用中括号包裹数据,格式为: $变量=[元素1,元素2,元素3...];//不指定下标的话,系统自动赋予下标,从0开始 3、隐形数组 PHP数组特点 1、可以整数下标也可以KEY下标 如果下标都为整数,称为索引数组。 如果下标都为KEY,成为关联数组。 2、不同下标可以混合存在:混合数组。 3、数组元素的顺序以放入顺序为准,跟下标无关 4、数组下标的自增长性 5、特殊值下标的自动转换:为阅读流畅应避免这种方式命名下标。 布尔值:true和false 空:NULL 6、php中数组元素没有类型限制。 7、php中数组元素没有长度限制 补充:php中的数组是很大的数据,所以存储位置是堆区,为当前数组分配一块连续的内存。 多维数组 数组里面的元素又是数组。 *在PHP中没有维数限制。但是为流畅性和结构化,不建议超过三维以上数组。也会增加复杂度、降低访问效率。 二维数组: 数组里面所有元素都是一维数组。 异形数组(不规则数组): 数组中的元素不规则,有普通基本变量,也有数组。 在实际开发中并不常用,我们一般尽量让数组元素规则化(便于访问)。
遍历数组: 遍历的基本含义: foreach遍历语法 foreach (array_expression as $value) statement foreach (array_expression as $key => $value) statement 如上图代码,演示了foreach两种遍历。 在进行数据存储定义的时候,通常二维数组不会两个维度的key下标都为数字,一般是一维为数字(无意义),二维为字符串(数据库表字段),所以在进行遍历的时候,通常只需要对一维数组进行遍历,取得二维数组元素,然后二维数组通过下标去访问。如下例所示。 foreach遍历原理: 本质是数组内部有一个指针,默认指向数组第一个元素。foreach利用指针获取数据,同时移动指针。 1、foreach会重置指针,让指针指向第一个元素。 2、进入foreach循环,通过指针取得当前第一个元素,然后将下标取出,放到对应的下标变量中(如果存在),将值取出来放到对应的值变量中。指针下移。 3、进入循环内部(循环体),开始执行; 4、重复2-3,直到在2的时候遇到指针取不到内容(指针指向数组最后),即结束。 for循环遍历数组 如上图代码演示for循环遍历数组。注意$len=count($arr)放置于循环起始处,使得它只计算一次。 while配合each和list遍历数组 each函数: 返回数组中当前的键/值对并将数组指针向后移动一步。*注意:自PHP 7.2.0起,此函数已被弃用。 非常不鼓励依赖此功能。 如果调用each函数,数组指针已经移动到数组尾部;此时继续调用each,则因为指针无法再向后移动返回false。 如上图代码。调用4次each,数组指针已经到数组尾部再无数组元素(本数组只有4个元素)。此时继续调用each函数,返回false。 list: 语法:list($var1[,$...] ) :array 功能: 把数组中的值赋给一组变量。理论上它是一种结构而不是函数。像array()一样,这不是真正的函数,而是语言结构。list()可以在单次操作内就为一组变量赋值。 Note: 在 PHP 7.1.0 之前的版本,list()仅能用于数字索引的数组,并假定数字索引从 0 开始。 警告: PHP 5 里,list()从最右边的参数开始赋值; PHP 7 里,list()从最左边的参数开始赋值。 如果你用单纯的变量,不用担心这一点。 但是如果你用了具有索引的数组,通常你期望得到的结果和在list()中写的一样是从左到右的,但在 PHP 5 里实际上不是, 它是以相反顺序赋值的。 通常而言,不建议依赖于操作的顺序,在未来可能会再次发生修改。 警告: 在list()执行过程中修改数组(比如使用list($a, $b) = $b)将会产生不可预知的结果。 如上图代码演示,$arr数组有两个元素,0号元素和2号元素(缺1号元素)。 list是按索引号顺序自动寻找数组元素的,因此在如上语句中$firtst指定为第一个元素即0号元素,则$second自动顺序指定为下一个元素即索引为1号的元素,但是明显数组中不存在该元素,因此系统报错。 list与each配合特别好:each(共4个元素,其中)含2个元素就是0和1下标元素。 list(变量1,变量2)=each(数组);//是一种赋值运算,但是可以得到false结果(each指针已移动到数组尾部,此时取不到正确的结果) 数组相关的函数: 1、排序函数:都是按照ascii码顺序比较 sort函数:对数组顺序排序((排序后下标重置)) 语法:sort(array&$array[,int$sort_flags= SORT_REGULAR] ) :bool 本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。 注意: 如果两个成员比较相等,则它们在排序数组中的相对顺序是未定义的。 参数 array 要排序的数组。 sort_flags 可选的第二个参数sort_flags可以用以下值改变排序的行为: 排序类型标记: 返回值 成功时返回TRUE, 或者在失败时返回FALSE。 rsort():对数组逆序排序。(排序后下标重置) 如上图代码,排序之后,下标被重置了. asort():排序(保留原有下标) arsort():逆序排序(保留原有下标) 如上图代码,排序后原有下标保留,并未改变. ksort():顺序排序(按key排序) krsort():逆序排序(按KEY排序) 如上图代码,krsort按key值逆序排列. shuffle(数组):随机打乱数组元素,下标会重置 如上图代码,shuffle随机打乱数组元素.下标会重置. 2数组指针函数 reset():重置指针,指针指向第1个元素并获取元素值 end():重置指针,指针指向最后1个元素并获取元素值 next():指针下移一位.,获取该元素值,无效则返回false prev():指针上移一位.获取该元素值,无效则返回false current():获取当前指针对应的元素值.,无效则返回false key():获取当前指针对应的key/下标 注意事项:假如指针在首位再使用prev;假如指针在最后1个元素再使用next,导致指针超出范围,且无法再用指针使用数组,此时只能使用end或reset重置指针.
上例演示数组指针错误操作后指针变为无效及返回值. 3其他函数 count():获取数组元素数量. array_push():在数组尾部添加1个或多个元素(压入),返回处理之后数组元素个数. array_pop();去除数组最后1个元素(弹出),并返回该元素值. array_shift():去除数组第一个元素,并返回该元素值. array_unshift():在数组首部插入1个或多个元素.,返回处理之后数组元素个数. PHP模拟数据结构: 栈:压栈,先进后出(FILO) 队列:类似排队,先进先出(FIFO) array_reverse():返回单元顺序相反的数组 in_array();判断一个元素在数组中是否存在 array_keys();获取1个数组的所有下标,返回1个索引数组 array_values():获取1个数组的所有值,返回1个索引数组. 编程思想: 递推算法 递推算法是一种简单的算法,即通过已知条件,利用特定关系得出中间推论,直至得到结果的算法.递推算法分顺推和逆推. 顺推:通过最简单的已知条件,然后逐步推演结果. 逆推:通过结果找到规律,然后推到已知条件. 下例求斐波那契数列 递归算法: 1简化问题:找到最优子问题(不能再小了) 2函数自己调用自己 递归算法很容易把系统资源糟蹋完,慎用! 数组排序算法 冒泡算法 冒泡排序视频: 选择排序视频: 插入排序视频: 快速排序视频: 归并排序视频: 查找算法: 上图代码演示了顺序查找. 二分查找法视频: (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |