|
键值操作
数组的每个元素都是由键值对组成,通过元素的键名来访问对应的键值。关于键值操作有array_values()、array_keys()、in_array()、array_flip()和array_reverse()这5个常用函数
array_values
array_values() 返回 input 数组中所有的值并给其建立数字索引
array array_values ( array $input ) array_keys
array_keys() 返回 input 数组中的数字或者字符串的键名
array array_keys ( array $array [, mixed $search_value [, bool $strict = false ]] ) 如果指定了可选参数 search_value,则只返回该值的键名。否则 input 数组中的所有键名都会被返回
如果指定了可选参数 strict,表示判断在搜索的时候是否该使用严格的比较(===)
in_array
in_array — 检查数组中是否存在某个值
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) 如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同
array_flip
array_flip — 交换数组中的键和值,成功时返回交换后的数组,如果失败返回 NULL
array array_flip ( array $trans ) array_flip() 返回一个反转后的 array,例如 trans 中的键名变成了值,而 trans 中的值成了键名
如果同一个值出现了多次,则最后一个键名将作为它的值,所有其它的都丢失了
[注意]trans中的值需要能够作为合法的键名,例如需要是 integer 或者 string。如果值的类型不对将发出一个警告,并且有问题的键/值对将不会反转
array_reverse
array_reverse — 返回一个单元顺序相反的数组
array array_reverse ( array $array [, bool $preserve_keys = false ] ) 如果参数preserve_keys设置为 TRUE 会保留数字的键。非数字的键则不受这个设置的影响,总是会被保留
记数
count
count — 计算数组中的单元数目或对象中的属性个数
int count ( mixed $var [, int $mode = COUNT_NORMAL ] ) 如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数。对计算多维数组的所有单元尤其有用。mode 的默认值是 0。count() 识别不了无限递归
array_count_values
array_count_values — 统计数组中所有的值出现的次数
array array_count_values ( array $input ) array_unique
array_unique — 移除数组中重复的值
array array_unique ( array $array [, int $sort_flags = SORT_STRING ] ) [注意]键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留
array_sum
array_sum — 计算数组中所有值的和
array_sum() 将数组中的所有值的和以整数或浮点数的结果返回
回调函数
array_filter
array_filter — 用回调函数过滤数组中的单元
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ) 依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变
[注意]如果没有提供 callback 函数, 将删除 input 中所有等值为 FALSE 的条目
array_walk
array_walk — 使用用户自定义函数对数组中的每个元素做回调处理
bool array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] ) 将用户自定义函数 funcname 应用到 array 数组中的每个单元。array_walk() 不会受到 array 内部数组指针的影响。array_walk() 会遍历整个数组而不管指针的位置
典型情况下 callback 接受两个参数。array 参数的值作为第一个,键名作为第二个
如果提供了可选参数 userdata,将被作为第三个参数传递给 callback funcname
array_map
array_map — 将回调函数作用到给定数组的单元上
array array_map ( callable $callback , array $arr1 [, array $... ] ) array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致
组合
array_slice
array_slice — 从数组中取出一段
array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] ) array_slice() 返回根据 offset 和 length 参数所指定的 array 数组中的一段序列
[注意]array_slice()默认会重新排序并重置数组的数字索引。可以通过将 preserve_keys 设为 TRUE 来改变此行为
array_splice
array_splice — 把数组中的一部分去掉并用其它值取代,返回一个包含有被移除单元的数组,而原数组为变化后的数组
array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed $replacement ]] ) 把 input 数组中由 offset 和 length 指定的单元去掉,如果提供了 replacement 参数,则用其中的单元取代
[注意]input 中的数字键名不被保留
array_combine
array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
array array_combine ( array $keys , array $values ) [注意]如果作为keys的数组和作为values的数组的元素个数不一样,将会抛出一个警告错误
array_merge
array_merge — 合并一个或多个数组
array array_merge ( array $array1 [, array $... ] ) array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引
【+】
如果想完全保留原有数组并只想新的数组附加到后面,用 + 运算符
[注意]如果输入的数组中有相同的字符串键名,则该键名前面的值将覆盖后面的值
array_intersect
array_intersect — 计算数组的交集
array array_intersect ( array $array1 , array $array2 [, array $ ... ] ) array_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值
[注意]键名保留不变
array_diff
array_diff — 计算数组的差集
array array_diff ( array $array1 , array $array2 [, array $... ] ) 对比返回在 array1 中但是不在 array2 及任何其它参数数组中的值
array_fill
array_fill — 用给定的值填充数组,返回填充后的数组
array array_fill ( int $start_index , int $num , mixed $value ) array_fill() 用 value 参数的值将一个数组填充 num 个条目,键名由 start_index 参数指定的开始
?php$a = array_fill(5, 6, 'banana');$b = array_fill(-2, 4, 'pear');//Array ( [5] => banana [6] => banana [7] => banana [8] => banana [9] => banana [10] => banana )print_r($a);//Array ( [-2] => pear [0] => pear [1] => pear [2] => pear )print_r($b);?>
range
range — 建立一个包含指定范围单元的数组,返回的数组中从 start 到 limit 的单元,包括它们本身
array range ( mixed $start , mixed $limit [, number $step = 1 ] ) 如果给出了 step 的值,它将被作为单元之间的步进值。step 应该为正值。如果未指定,step 则默认为 1
栈和队列
array_pop
array_pop — 将数组最后一个单元弹出(出栈)
mixed array_pop ( array &$array ) array_pop() 弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。如果 array 为空(或者不是数组)将返回 NULL
array_push
array_push — 将一个或多个单元压入数组的末尾(入栈),返回处理之后数组的元素个数
int array_push ( array &$array , mixed $var [, mixed $... ] ) array_push() 将 array 当成一个栈,并将传入的变量压入 array 的末尾。array 的长度将根据入栈变量的数目增加
array_shift
array_shift — 将数组开头的单元移出数组
mixed array_shift ( array &$array ) array_shift() 将 array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变
array_unshift
array_unshift — 在数组开头插入一个或多个单元,返回 array 数组新的单元数目
int array_unshift ( array &$array , mixed $var [, mixed $... ] ) array_unshift() 将传入的单元插入到 array 数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变
顺序
array_rand
array_rand — 从数组中随机取出一个或多个单元,并返回随机条目的一个或多个键
mixed array_rand ( array $input [, int $num_req = 1 ] ) [注意]如果只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组
shuffle
shuffle — 将数组打乱,成功时返回 TRUE, 或者在失败时返回 FALSE
bool shuffle ( array &$array )
|
|
|