PHP学习笔记——数组

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZLANBL085321/article/details/86502983

PHP的数组更加灵活,不但支持数字索引数组,而且支持以字符串或字符串、数字混合为键名的关联数组。
一、声明数组
有两种方式:一是应用数组函数声明数组;二是通过数组标识符[]声明数组。
1、通过函数创建数组
在这里插入图片描述1)array array([mixed…])
参数mixed的预防为“key=>value”(多个参数mixed用逗号隔开),分别定义了索引和值。索引可以是字符串或数字。如果省略了索引,会自动产生从0开始的整数索引。如果索引是整数,则下一个产生的索引将是目前最大的整数索引+1。如果定义了两个完全一样的索引,则后面一个会覆盖前一个。当mixed是数组类型时,是二维数组。
此外 key 会有如下的强制转换:
A、包含有合法整型值的字符串会被转换为整型。例如键名 “8” 实际会被储存为 8。但是 “08” 则不会强制转换,因为其不是一个合法的十进制数值。
B、 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
C、布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
D、Null 会被转换为空字符串,即键名 null 实际会被储存为 “”。
E、数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。

2)array array_combine(array keys, array values)
通过合并两个数组来创建一个新数组,keys为键名(其非法的值将会被转换为字符串类型),values为值。键名数组和键值数组的元素个数必须相同,否则返回false。

3)array array_fill(int start_index, int num, mixed value)
用给定的值填充数组。用value将一个数组填充num个条目,键名由start_index指定开始。参数start_index是返回的数组的第一个索引值,如果是负数,那么返回数组的第一个索引值是start_index,而后面的索引则从0开始。参数num是插入元素的数目,必须大于0(PHP5.6以后,可以是大于等于0的数)。参数value是用来填充的值。

4)array array_pad(array arr, int size, mixed value)
返回arr的一个拷贝,并用 value 将其填补到 size 指定的长度。如果 size 为正,则填补到数组的右侧,如果为负则从左侧开始填补。如果 size 的绝对值小于或等于 array 数组的长度则没有任何填补。有可能一次最多填补 1048576 个单元。 参数arr是需要被填充的原始数组。参数size是新数组的长度。参数value是将被填充的值,只有在 array 的现有长度小于 size 的长度时才有效。

5)array compact(mixed name1[,mixed …])
建立一个数组,包括变量名和它们的值 。对每个参数,compact() 在当前的符号表中查找该变量名并将它添加到输出的数组中,变量名成为键名而变量的内容成为该键的值。compact() 接受可变的参数数目。每个参数可以是一个包括变量名的字符串或者是一个包含变量名的数组,该数组中还可以包含其它单元内容为变量名的数组, compact() 可以递归处理。返回输出的数组,包含了添加的所有变量。如果字符串指向的变量未定义,compact() 会产生 E_NOTICE 级错误。

6)array range(mixed start, mixed end[, number step =1])
建立一个包含指定范围单元的数组。 参数start是序列的第一个值。参数end是序列结束于 end 的值。如果 end比 start小,则返回反序的数组。如果设置了步长 step,会被作为单元之间的步进值。step 应该为正值。不设置step 则默认为 1。 返回的数组中从 start 到 end (含 start 和 end)的单元。注意,字符序列值仅限单个字符。 如果长度大于1,仅仅使用第一个字符。

2、通过数组标识符“[]”创建数组
如果在创建数组时不知所创建数组的大小,或数组的大小可能会发生变化,采用这是方式创建数组比较好。

二、输出数组
1、bool print_r(mixed expression)
如果该函数的参数expression为普通的整型、字符型或实型变量,则输出变量本身;如果该参数为数组,则按一定键值和元素的顺序显示出该数组中的所有元素。

2、void var_dump(mixed expression[,mixed …])
可以输出数组(或对象)、元素数量以及每个字符串的长度。还能够以缩进方式输出数组或对象的结构。

三、遍历数组
1、foreach结构遍历数组
foreach结构并非操作数组本身,二是操作数组的一个备份。

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

3、array list(mixed var1[, mixed…])
把数组中的值赋给一组变量 。像 array() 一样,这不是真正的函数,而是语言结构。 list() 可以在单次操作内就为一组变量赋值。 在 PHP 7.1.0 之前的版本,list() 仅能用于数字索引的数组,并假定数字索引从 0 开始。 PHP 5 里,list() 从最右边的参数开始赋值; PHP 7 里,list() 从最左边的参数开始赋值。在 list() 执行过程中修改数组(比如使用 list($a, $b) = $b)将会产生不可预知的结果。

4、for语句遍历数组
首先必须用count()函数获取到数组中单元数目,然后将数组中单元数目作为for循环的条件,执行循环输出。
int count(mixed array[,int mode])
参数array为指定输入的数组,参数mode为可选参数,COUNT_RECURSIVE(或1),如选中此参数,本函数将递归地对数组计数,这对计算多维数组的所有条目有用。

四、合并数组
1、array array_merge(array arr1, array arr2[,array…])
将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。 (如果你想完全保留原有数组并只想新的数组附加到后面,用 + 运算符,在两个数组中存在相同的键名时,第一个数组中的同键名的元素将会被保留,第二个数组中的元素将会被忽略)

2、array array_merge_recursive ( array arr1 [, array … ] )
将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。 如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去,这将递归下去,因此如果一个值本身是一个数组,本函数将按照相应的条目把它合并为另一个数组。需要注意的是,如果数组具有相同的数值键名,后一个值将不会覆盖原来的值,而是附加到后面。

五、字符串与数组的转换
1、array explode ( string delimiter , string str [, int limit ] )
此函数返回由字符串组成的数组,每个元素都是 str 的一个子串,它们被字符串 delimiter 作为边界点分割出来。如果设置了 limit 参数并且是正数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 str 的剩余部分。如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素。如果 limit 是 0,则会被当做 1。如果 delimiter 为空字符串(""),explode() 将返回 FALSE。 如果 delimiter 所包含的值在 str中找不到,并且使用了负数的 limit , 那么会返回空的 array, 否则返回包含 str 单个元素的数组。

2、string implode ( string glue , array pieces )
将一个一维数组的值转化为字符串,返回一个字符串,其内容为由 glue 分割开的数组的值。参数glue是默认为空的字符串。参数pieces是指定要被合并的数组。

六、数组排序
1、 bool sort(array arr[, int sort_flags = SORT_REGULAR ])
用于对数字数组按字母顺序进行升序排序,在指定特殊参数时,也可以按数值排序。当数组被排序后,索引会被重置(如果两个元素相同,则在排序的数组中其前后顺序是未知的,因为sort()函数使用的是快速排序算法)。排序成功后返回true,否则返回false。参数sort_flags是可选的,可以用以下值改变排序的行为:
排序类型标记:
SORT_REGULAR - 正常比较单元(不改变类型),默认值
SORT_NUMERIC - 单元被作为数字来比较
SORT_STRING - 单元被作为字符串来比较
SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。
SORT_NATURAL - 和 natsort() 类似对每个单元以“自然的顺序”对字符串进行排序。 PHP 5.4.0 中新增的。
SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。

2、bool rsort ( array &arr[, int sort_flags = SORT_REGULAR ] )
对数组逆向排序,与sort()函数相反,使用方法见sort()函数。

3、bool ksort ( array &arr [, int sort_flags = SORT_REGULAR ] )
对关联数组进行排序,对数组按照键名排序,保留键名与值之间的对应关系。可选参数 sort_flags 改变排序的行为,详情见 sort()。成功时返回 TRUE, 或者在失败时返回 FALSE。

4、bool asort ( array &arr [, int sort_flags = SORT_REGULAR ] )
对关联数组的元素值进行排序,并且保留键名与值之间的对应关系。主要用于对那些单元顺序很重要的关联数组进行排序(如果两个元素相同,则在排序的数组中其前后顺序是未知的)。可选参数 sort_flags 改变排序的行为,详情见 sort()。成功时返回 TRUE, 或者在失败时返回 FALSE。

5、bool arsort ( array &arr [, int sort_flags = SORT_REGULAR ] )
对关联数组的元素值进行逆向排序 ,并且保留键名与值之间的对应关系。主要用于对那些单元顺序很重要的关联数组进行排序(如果两个元素相同,则在排序的数组中其前后顺序是未知的)。可选参数 sort_flags 改变排序的行为,详情见 sort()。成功时返回 TRUE, 或者在失败时返回 FALSE。

6、bool array_multisort ( array &arr1 [, mixed arr1_sort_order = SORT_ASC [, mixed $arr1_sort_flags = SORT_REGULAR [, mixed … ]]] )
用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。关联(string)键名保持不变,但数字键名会被重新索引(如果两个元素相同,则在排序的数组中其前后顺序是未知的)。可选 参数arr1_sort_order 是要排列的顺序, SORT_ASC 按照上升顺序排序, SORT_DESC 按照下降顺序排序。此参数可以和 arr1_sort_flags 互换,也可以完全删除,默认是 SORT_ASC 。可选参数arr1_sort_flags改变排序的行为,详情见 sort()。mixed后可提供更多数组,跟随在 sort order 和 sort flag 之后, 提供的数组和之前的数组要有相同数量的元素。

其他排序函数参见PHP手册,每个排序函数的例子也参见PHP手册。

没有更多推荐了,返回首页