PHP 开发工程师基础篇 - PHP 数组
数组 (Array)
数组是 PHP 中最重要的数据类型,可以说是掌握数组,基本上 PHP 一大半问题都可以解决. PHP 数组与其他编程语言数组概念不一样。其他编程语言数组是由相同类型的元素(element)的集合所组成的数据结构,而 PHP 数组元素可以为不同类型的元素。因此说 PHP 数组不是纯粹的数组,而是哈希 (字典) 更为恰当.
PHP 数组可以当作真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。数组分为关联数组 (类似字典) 和索引数组 (纯数组,键值从数字开始,一般从 0 开始).
语法
- array
- []
数组键值注意事项
PHP 数组的键值仅支持字符串 (string) 和整型 (integer). 其他类型均会转换数字或字符串。浮点类型会被转换为整型类型的,8.7->8. 布尔类型则会转换为整型类型的,true->1, false->0. Null 会被转换为空的字符串,数组和对象则不会转换成为字符串类型和整型。会抛出一个警告: Illegal offset type.
注意的是字符串类型假如是有效十进制数字的话,则会转换为整型. "8"->8. 若不想转换则在数字前添加 "+" 符号.
数组基本操作 (增删改查)
通过在方括号 ([]) 内指定键名来给数组赋值实现的增加和修改元素,也可以省略键名.
- 增加数组的元素
- 删除数组的元素
- 改变数组的元素
- 查询数组的元素
其他类型转换为数组
除了对象 (Object) 转换数组外,对于对于任意 integer,float,string,boolean 和 resource 类型,如果将一个值转换为数组,将得到一个仅有一个元素的数组,其下标为 0.
(array)$scalarValue 与 array ($scalarValue) 一样。而对象 (object) 类型转换为 array. 其单元为该对象的属性。键名将为成员变量名,不过有几点例外:整数属性不可访问;私有变量前会加上类名作前缀;保护变量前会加上一个 '*' 做前缀。这些前缀的前后都各有一个 NULL 字符。这会导致一些不可预知的行为:
数组函数分类
-
创建数组
- array_combine (array $keys , array $values) : array — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
- array_fill_keys (array $keys , mixed $value) : array — 使用指定的键和值填充数组
- array_fill (int $start_index , int $num , mixed $value) : array — 用给定的值填充数组
- array — 新建一个数组
- compact (mixed $varname1 [, mixed $...] ) : array — 建立一个数组,包括变量名和它们的值
- range (mixed $start , mixed $end [, number $step = 1] ) : array — 根据范围创建数组,包含指定的元素
-
数组分割
- array_chunk (array $array , int $size [, bool $preserve_keys = FALSE] ) : array — 将一个数组分割成多个
- array_slice (array $array , int $offset [, int $length = NULL [, bool $preserve_keys = FALSE]] ) : array — 从数组中取出一段
-
数组队列或栈操作
- array_pop (array &$array) : mixed — 弹出数组最后一个单元(出栈)
- array_push (array &$array [, mixed $...] ) : int — 将一个或多个单元压入数组的末尾(入栈)
- array_shift (array &$array) : mixed — 将数组开头的单元移出数组
- array_unshift (array &$array [, mixed $...] ) : int — 在数组开头插入一个或多个单元
-
数组数学运算
- array_count_values (array $array): array — 统计数组中所有的值
- array_product (array $array) : number — 计算数组中所有值的乘积
- array_reduce ( array $array , callable $callback [, mixed $initial = NULL ] ) : mixed
- array_sum (array $array) : number — 对数组中所有值求和
-
数组键值操作
- array_change_key_case (array $array [, int $case = CASE_LOWER] ) : array — 将数组中的所有键名修改为全大写或小写
- array_key_exists (mixed $key , array $array) : bool — 检查数组里是否有指定的键名或索引
- array_key_first (array $array) : mixed — 获取数组第一个键值
- array_key_last (array $array) : mixed — 获取数组最后一个键值
- array_keys (array $array , mixed $search_value [, bool $strict = FALSE] ) : array | array_keys ( array $array ) : array — 返回数组中部分的或所有的键名
- key_exists — 别名 array_key_exists
-
数组元素操作
- array_pad (array $array , int $size , mixed $value) : array — 以指定长度将一个值填充进数组
- array_rand (array $array [, int $num = 1] ) : mixed — 从数组中随机取出一个或多个单元
- array_search (mixed $needle , array $haystack [, bool $strict = FALSE] ) : mixed — 在数组中搜索给定的值,如果成功则返回首个相应的键名
- array_values (array $array) : array — 返回数组中所有的值
- in_array (mixed $needle , array $haystack [, bool $strict = FALSE] ) : bool 检查数组中是否存在某个值
-
数组交集与差集,合并
- array_diff_assoc (array $array1 , array $array2 [, array $...] ) : array — 带索引检查计算数组的差集
- array_diff_key (array $array1 , array $array2 [, array $...] ) : array — 使用键名比较计算数组的差集
- array_diff_uassoc (array $array1 , array $array2 [, array $...], callable $key_compare_func ) : array — 用用户提供的回调函数做索引检查来计算数组的差集
- array_diff_ukey (array $array1 , array $array2 [, array $...], callable $key_compare_func ) : array — 用回调函数对键名比较计算数组的差集
- array_diff (array $array1 , array $array2 [, array $...] ) : array — 计算数组的差集
- array_intersect_assoc (array $array1 , array $array2 [, array $...] ) : array — 带索引检查计算数组的交集
- array_intersect_key (array $array1 , array $array2 [, array $...] ) : array — 使用键名比较计算数组的交集
- array_intersect_uassoc ( array $array1 , array $array2 [, array $... ], callable $key_compare_func ) : array
— 带索引检查计算数组的交集,用回调函数比较索引 - array_intersect_ukey (array $array1 , array $array2 [, array $...], callable $key_compare_func ) : array — 用回调函数比较键名来计算数组的交集
- array_intersect (array $array1 , array $array2 [, array $...] ) : array — 计算数组的交集
- array_merge_recursive ([array $...] ) : array — 递归地合并一个或多个数组
- array_merge (array $array1 [, array $...] ) : array — 合并一个或多个数组
- array_udiff_assoc (array $array1 , array $array2 [, array $...], callable $value_compare_func ) : array — 带索引检查计算数组的差集,用回调函数比较数据
- array_udiff_uassoc (array $array1 , array $array2 [, array $...], callable $value_compare_func , callable $key_compare_func ) : array — 带索引检查计算数组的差集,用回调函数比较数据和索引
- array_udiff (array $array1 , array $array2 [, array $...], callable $value_compare_func ) : array — 用回调函数比较数据来计算数组的差集
- array_uintersect_assoc (array $array1 , array $array2 [, array $...], callable $value_compare_func ) : array — 带索引检查计算数组的交集,用回调函数比较数据
- array_uintersect_uassoc (array $array1 , array $array2 [, array $...], callable $value_compare_func , callable $key_compare_func ) : array — 带索引检查计算数组的交集,用单独的回调函数比较数据和索引
- array_uintersect (array $array1 , array $array2 [, array $...], callable $value_compare_func ) : array — 计算数组的交集,用回调函数比较数据
-
数组排序
- array_multisort (array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $...]]] ) : bool — 对多个数组或多维数组进行排序
- arsort (array &$array [, int $sort_flags = SORT_REGULAR] ) : bool — 对数组进行逆向排序并保持索引关系
- asort (array &$array [, int $sort_flags = SORT_REGULAR] ) : bool — 对数组进行排序并保持索引关系
- krsort (array &$array [, int $sort_flags = SORT_REGULAR] ) : bool — 对数组按照键名逆向排序
- ksort (array &$array [, int $sort_flags = SORT_REGULAR] ) : bool — 对数组按照键名排序
- rsort (array &$array [, int $sort_flags = SORT_REGULAR] ) : bool — 对数组逆向排序
- sort (array &$array [, int $sort_flags = SORT_REGULAR] ) : bool — 对数组排序
- uasort (array &$array , callable $value_compare_func) : bool — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
- uksort (array &$array , callable $key_compare_func) : bool — 使用用户自定义的比较函数对数组中的键名进行排序
- usort (array &$array , callable $value_compare_func) : bool — 使用用户自定义的比较函数对数组中的值进行排序
- natcasesort (array &$array) : bool — 用 “自然排序” 算法对数组进行不区分大小写字母的排序
- natsort (array &$array) : bool — 用 “自然排序” 算法对数组排序
-
回调函数处理数组
- array_filter (array $array [, callable $callback [, int $flag = 0]] ) : array — 用回调函数过滤数组中的单元
- array_map (callable $callback , array $array1 [, array $...] ) : array — 为数组的每个元素应用回调函数
- array_walk_recursive (array &$array , callable $callback [, mixed $userdata = NULL] ) : bool — 对数组中的每个成员递归地应用用户函数
- array_walk (array &$array , callable $callback [, mixed $userdata = NULL] ) : bool — 使用用户自定义函数对数组中的每个元素做回调处理
-
数组替换
- array_replace_recursive (array $array1 [, array $...] ) : array — 使用传递的数组递归替换第一个数组的元素
- array_replace (array $array1 [, array $...] ) : array — 使用传递的数组替换第一个数组的元素
- array_splice (array & $input , int $offset [, int $length = count ($input) [, mixed $replacement = array () ]] ) : array — 去掉数组中的某一部分并用其它值取代
-
数组指针操作
- current (array $array) : mixed — 返回数组中的当前单元
- end (array &$array) : mixed — 将数组的内部指针指向最后一个单元
- key (array $array) : mixed — 从关联数组中取得键名
- next (array &$array) : mixed — 将数组中的内部指针向前移动一位
- pos — current 的别名
- prev (array &$array) : mixed — 将数组的内部指针倒回一位
- reset (array &$array) : mixed — 将数组的内部指针指向第一个单元
-
其他
- array_column (array $input , mixed $column_key [, mixed $index_key = NULL] ) : array — 返回数组中指定的一列
- array_flip (array $array) : array — 交换数组中的键和值
- array_reverse (array $array [, bool $preserve_keys = FALSE] ) : array — 返回单元顺序相反的数组
- array_unique (array $array [, int $sort_flags = SORT_STRING] ) : array — 移除数组中重复的值
- count (mixed $array_or_countable [, int $mode = COUNT_NORMAL] ) : int — 计算数组中的单元数目,或对象中的属性个数
-
extract (array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL]] ) : int — 从数组中将变量导入到当前的符号表
- list (mixed $var1 [, mixed $...] ) : array — 把数组中的值赋给一组变量
- shuffle (array &$array) : bool — 打乱数组
- sizeof 等同于 count
- 很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的加群(点击→)677079770