PHP之数组函数

时间:2023-03-08 18:16:25
PHP之数组函数

php数组中的预定义变量

预定义常量

CASE_LOWER (integer)

CASE_LOWER 用在array_change_key_case()中将数组的键名转换为小写字母。这也是array_change_key_case() 的默认值

CASE_UPPER (integer)

CASE_UPPER 用在 array_change_key_case() 中将数组的键名转换成大写字母.

排序顺序标识:

SORT_ASC (integer)

SORT_ASC 用在array_multisort()函数,使其升序排列。

SORT_DESC (integer)

SORT_DESC 用在 array_multisort() 函数中,使其降序排列。

排序类型标识:用于各种排序函数

SORT_REGULAR (integer)

SORT_REGULAR 用于对对象进行通常比较。

SORT_NUMERIC (integer)

SORT_NUMERIC 用于对对象进行数值比较。

SORT_STRING (integer)

SORT_STRING 用于对对象进行字符串比较。

SORT_LOCALE_STRING (integer)

SORT_LOCALE_STRING 基于当前区域来对对象进行字符串比较。PHP 4.4.0 和 5.0.2 新加。

COUNT_NORMAL (integer)

COUNT_RECURSIVE (integer)

EXTR_OVERWRITE (integer)

EXTR_SKIP (integer)

EXTR_PREFIX_SAME (integer)

EXTR_PREFIX_ALL (integer)

EXTR_PREFIX_INVALID (integer)

EXTR_PREFIX_IF_EXISTS (integer)

EXTR_IF_EXISTS (integer)

EXTR_REFS (integer)

对数组进行排序

PHP有一些用于排序数组的函数,这个文档会把它们列出来。

主要区别有:

①、有些函数基于array的键来排序,而其他的基于值来排序的:$array['key'] = 'value';

②、排序之后键和值的关联关系是否能够保持,是指排序之后数组的键可能会被重置为数字型的(0,1,2,3...)。

③、排序的顺序有:字母表顺序,由低到高(升序),由高到低(降低),数字排序,自然排序,随机排序或者用户自定义排序。

注意:下列的所有排序函数都是直接作用于数组本身,而不是返回一个新的有序数组。

以下函数对于数组中相等的元素,它们在排序后的顺序是未定义的。(也即相等元素之间的顺序是不稳定的)。

排序函数属性

函数名称 排序依据 数组索引保持 排序的顺序 相关的函数

array_multisort() 值 键值关联的保持,数字类型的不保持 第一个数组或者由选项制定 array_walk()

asort 值 是 由低到高 arsort()

arsort 值 是 由高到低 asort()

krsort 键 是 由高到低 ksort()

ksort 键 是 由低到高 asort()

natcasesort() 值 是 自然排序,大小写不敏感 natcasesort()

natsort() 值 是 自然排序 natcasesort()

rsort() 值 否 由高到低 sort()

shuffle() 值 否 随机 array_rand()

sort() 值 否 由低到高 rsort()

uasort() 值 是 由用户定义 uksort()

uksort() 键 是 由用户定义 uasort()

usort() 值 否 由用户定义 uasort()

数组函数介绍???????

1、array_change_key_case ------将数组中的所有键名修改为全大写或小写

array array_change_key_case(array $array [, int $case=CASE_LOWER])

参数

array 需要操作的数组。

case 可以在这里用两个常量,CASE_UPPER或者CASE_LOWER(默认值).

返回值 返回一个键全是小写或者全是大小的数组;如果输入值array不是一个数组,那么返回false。

错误/异常

如果输入值array不是一个数组,就会抛出一个错误警告(E_WARING)。

注释

Note:如果一个数组中的多个值名经过本函数最后变成一样的话(例如“keY”和“kEY”),最后一个值将覆盖其他的值。

2、array_chunk

array_chunk ---将一个数组分割成多个

说明

array array_chunk(array, int $size[, bool $preserve_keys = false])

讲一个数组分割成多个数组,其中每个数组的单元数组由size。最后一个数组的单元数可能会少于size个。

参数

array

需要操作的数组。

size

每个数组的单元数目

preserve_keys

设为true,可以使用PHP保留输入数组中原来的键名。

如果制定了false,那么每个数组将使用从零开始的新数字索引。默认值是false。

返回值

得到的数组是一个多为数组中的单元,其索引从零开始,每一维包含了size个元素。

错误/异常

如果size 小于1,会抛出一个E_WARNING 报错并返回null。

3、array_column 需要PHP大于5.5

array_column ---返回数组中制定的一列。

说明

array array_column(array $input, mixed $column_key[,$mixed $index_key=null])

array_column()返回input数组中值为column_key的列,如果指定了可选参数index_key,那么input数组的这一列的值将作为返回数组中对应值的键,。

参数

input

需要取出数组列的多维数组,如果提供了的是包含一组对象的数组,只有public属性会被直接取出。

为了也能取出private和protected属性,类必须实现__get()和__isset()魔术方法。

index_key

作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。

返回值

从多为数组中返回单列数组。

PHP7.0.0 input 参数现在可以是包含对象的数组。

在索引+关联二维数组,如何把id作为数组的键。经常用。

array_column($array, null, 'id')

如果PHP版本低于5.5,使用

function array_column($array,$column_name)

{

return array_map(function($element) use($column_name){return $element[$column_name];}, $array);

}

array_column()会返回重复值。

4、array_combine

array_combine --创建一个数组,用一个数组的值作为其键,另一个数组的值作为其值

说明

array arra_combine(array $keys, array $values)

返回一个array,用来自keys数组的值作为键名,来自values数组的值作为相应的值。

参数

keys将被作为新数组的键。非法的值将会被转换为字符串类型(string)。

values 将被作为array的值。

返回值

返回合并的array,如果连个数组的单元数不同则返回false。

错误/异常

如果作为keys的数组和作为values的数组的元素个数不一样,将会抛出一个警告错误(E_WARNING)。

5、array_count_values

array_count_values --统计数组中所有的值

说明

array array_count_values(array $array)

array_count_values返回一个数组:数组的键是array里单元的值;数组的值是array单元的值出现的次数。

参数:

input 统计这个数组的值

返回值

返回一个关联数组,用array数组中的值作为键名,该值在数组中出现的次数作为值。

错误/异常

对数组里面的每个不是string和integer类型的元素抛出一个警告(E_WARNING)。

6、array_diff_assoc

array_diff_assoc ---带索引检查计算数组的差集

说明

array array_diff_assoc(array $array1, array $array2[, array $...])

array_diff_assoc()返回一个数组,该数组包含了所有在array1中但是不在任何其它参数数组中的值。

注意和array_diff()不同的是键名也用于比较。

参数:

array1

从这个数组进行比较

array2

被比较的数组

...

更多比较的数组

返回值

返回在数组array1中不在array2中的数组。

上面的例子中可以看到键值对 "a" => "green" 在两个数组中都有,

因此不在本函数的输出中。与此不同,键值对 0 => "red" 出现在输出中是因为第二个参数中的 "red" 的键名是 1。

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");

$array2 = array("a" => "green", "yellow", "red");

$result = array_diff_assoc($array1, $array2);

print_r($result);

注意键值对key => value 中的两个值仅在(string) $elem1 === (string) $elem2时被认为相等。也就是说使用了严格检查。

字符串的表达必须相同。

7、array_diff_key

array_diff_key---使用键名比较计算数组的差集

说明

array array_diff_key ( array $array1 , array $array2 [, array $... ] )

根据array1中的键名和array2进行比较,返回不同键名的项。本函数和array_diff() 相同只除了比较是根据键名而不是值来进行的。

参数

array1 从这个数组进行比较

array2 针对此数组进行比较

...

更多比较数组。

返回值

array_diff_key() 返回一个数组,该数组包含了所有出现在array1中但是未出现在任何其他参数数组中的键名的值,

在key =》 value对中的两个键名仅在(string) $key1 === (string) $key2时被认为相等,换句话说,执行的是严格类型检查,因此字符串的表达必须完全一样。

8、array_diff_uassoc

array_diff_uassoc — 用用户提供的回调函数做索引检查来计算数组的差集

说明

array arra_diff_uassoc(array $array1 , array $array2 [, array $... ], callable $key_compare_func)

对比了 array1 和 array2 并返回不同之处。 注意和 array_diff() 不同的是键名也用于比较.

和 array_diff_assoc() 不同的是使用了用户自定义的回调函数,而不是内置的函数.

参数:

array1 待比较的数组

array2 和这个数组进行比较

... 更多比较的数组

key_compare_func

在第一个参数小于,等于或者大于第二参数时,该比较函数必须相应地返回一个小于,等于或者大于0的整数。

int callback (mixed $a, mixed $b)

返回值

返回一个array,该数组包含了所有的array1中但是不在任何其它参数数组中的值。

9、array_diff_ukey

array_diff_ukey --用回调函数对键名比较计算数组的差集

说明

array array_diff_ukey ( array $array1 , array $array2 [, array $... ], callable $key_compare_func )

array_diff_ukey() 返回一个数组,该数组包括了所有出现在 array1 中但是未出现在任何其它参数数组中的键名的值。

注意关联关系保留不变。本函数和 array_diff() 相同只除了比较是根据键名而不是值来进行的。

此比较是通过用户提供的回调函数来进行的。如果认为第一个参数小于,等于,

或大于第二个参数时必须分别返回一个小于零,等于零,或大于零的整数。

参数:

array1 The array to compare from

array2 An array to compare against

... More arrays to compare against

key_compare_func

在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。

int callback ( mixed $a, mixed $b )

10、array_diff

array_diff --计算数组的差集

说明

array array_diff ( array $array1 , array $array2 [, array $... ]

对比array1和其它一个或者多个数字,返回在array1中但是不在其它array里的值、

参数:

array1 要被对比的数组。

array2 和这个数组进行比较

... 更多相比较的数组

返回值

返回一个数组,该数组包含了所有在array1中但是不在任何其它参数数组中的值。注意键名称保持不变。

注释:

note: 两个单元仅在(string) $elem1 === (string) $elem2时被认为是相同的,也就是说,当字符串的表达式是一样的时候。

11、array_fill_keys

array_fill_keys --使用指定的键和值填充数组

array array_fill_keys(array $keys, mixed $value)

使用value参数的值作为值,使用keys数组的值键来填充一个数组。

参数:

keys 使用该数组的值作为键,非法值将被转换为字符串,

value 填充使用的值。

返回值 返回填充后的数组

12、array_fill

array_fill------用给定的值填充数组

说明

array array_fill(int $start_index, int $num, mixed $value)

array_fill()用value参数的值将一个数组填充num个条目,键名由start_index参数指定的开始。

参数:

start_index 返回的数组的一个索引值。

如果start_index是负数,那么返回的数组的第一个索引将会是start_index.而后面索引则从0开始,

num 插入元素的数量,必须大于或等于0,

value 用来填充的值。

错误/异常

如果num小于零,将会抛出E_WARNING,

13、array_filter

array_filter ----用回调函数过滤数组中的单元

说明

array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

依次将array数组中的每个值传递callback函数,如果callback函数返回true。则array数组的当前值会被包含在返回的结果数组中,数组的键名保持不变,

参数:

array 要循环的数组

callback

使用的回调函数

如果没有提供callback函数,将删除array中所有等值为false的条目。包括能转换为false的值。

flag

决定callback接受的参数形式:

①、ARRAY_FILTER_USE_KEY --callback接受键名作为的唯一参数。
②、ARRAY_FILTER_USE_BOTH-callback同时接受键名和键值。

返回值

返回过滤后的数组。

PHP5.6.0 添加可选的参数flag,以及常量ARRAY_FILTER_USE_KEY 和 ARRAY_FILTER_USE_BOTH.

注释:

caution 用户不应再回调函数中修改数组本身,例如增加/删除单元或者对array_filter()正在作用的数组进行unset。如果数组改变了。次函数的行为将不可预测,。

14、array_flip

array_flip ---交换数组中的键和值

说明

array array_flip(array $array)

array_flip()返回一个反转后的array,例如array中键名变成了值,而array中的值成了键名。

注意array中的值需要能够作为合法的键名(例如需要是integer或者string)。如果类型不对,将出现一个警告,

并且有问题的键/值对将不会出现结果中。

如果同一个值出现多次,则最后一个键名将作为它的值,其它键会被丢弃。

参数:

array 要交换键/值对的数组。

返回值

成功时返回交换后的数组,如果失败返回null

过滤数组中的false值。

15、array_intersect_assoc?????????

array_intersect_assoc — 带索引检查计算数组的交集

说明

array array_intersect_assoc ( array $array1 , array $array2 [, array $... ] )

array_intersect_assoc() 返回一个数组,

该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意和 array_intersect() 不同的是键名也用于比较。

参数:

array1 要检查的主值。

array2 要比较的数组

... 要比较的数组变量的列表

返回值

返回数组,该数组包含了所有在array1中也同时出现在所有其它参数数组中的值。

键值对 key => value 中的两个值仅在 (string) $elem1 === (string) $elem2 时被认为相等。也就是说使用了严格检查,字符串的表达必须相同。

16、array_intersect_uassoc

array_intersect_uassoc — 带索引检查计算数组的交集,用回调函数比较索引

说明

array array_intersect_uassoc ( array $array1 , array $array2 [, array $... ], callable $key_compare_func )

array_intersect_uassoc()返回一个数组,该数组包含了所有在array1中也同时出现在所有其它参数数组中的值,

注意和array_intersect()不同的是键名称也用于比较。

参数:

array1

Initial array for comparison of the arrays.

array2

First array to compare keys against.

...

Variable list of array arguments to compare values against.

key_compare_func

在第一个参数小于,等于或者大于第二个参数时,该比较函数必须相应地返回一个小于,等于或者大于0的整数。

int callback(mixed $a, mixed $b)

返回值

Returns the values of array1 whose values exist in all of the arguments

17、array_intersect_key

array_intersect_key — 使用键名比较计算数组的交集

说明 array array_intersect_key ( array $array1 , array $array2 [, array $... ] )

array_intersect_key() 返回一个数组,该数组包含了所有出现在 array1 中并同时出现在所有其它参数数组中的键名的值。

参数

array1

The array with master keys to check.

array2

An array to compare keys against.

...

A variable list of arrays to compare.

返回值:

Returns an associative array containing all the entries of array1 which have keys that are present in all arguments.

上例中可以看到只有 'blue' 和 'green' 两个键名出现在两个数组中,因此被返回。此外注意 'blue' 和 'green' 的值在两个数组中是不同的。但因为只检查键名,因此还是匹配。返回的值只是 array1 中的。

在 key => value 对中的两个键名仅在 (string) $key1 === (string) $key2 时被认为相等。换句话说,执行的是严格类型检查,因此字符串的表达必须完全一样。

18、array_intersect_ukey

array_intersect_ukey — 用回调函数比较键名来计算数组的交集。

说明:

array array_intersect_ukey ( array $array1 , array $array2 [, array $... ], callable $key_compare_func )

array_intersect_ukey() 返回一个数组,该数组包含了所有出现在 array1 中并同时出现在所有其它参数数组中的键名的值。

参数

array1

Initial array for comparison of the arrays.

array2

First array to compare keys against.

...

Variable list of array arguments to compare keys against.

key_compare_func

在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。

int callback ( mixed $a, mixed $b )

19、array_intersect

array_intersect— 计算数组的交集

说明:

array array_intersect ( array $array1 , array $array2 [, array $... ] )

array_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。

参数

array1

要检查的数组,作为主值。

array2

要被对比的数组。

...

要对比的数组列表。

返回值:

返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。

注释:

Note: 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。

20、array_key_exists

array_key_exists — 检查数组里是否有指定的键名或索引

说明:bool array_key_exists ( mixed $key , array $array )

数组里有键 key 时,array_key_exists() 返回 TRUE。 key 可以是任何能作为数组索引的值。

参数:

keys 要检查的键。

array:一个数组,包含待检查的键

返回值:

成功时返回 TRUE, 或者在失败时返回 FALSE

Note:array_key_exists() 仅仅搜索第一维的键。 多维数组里嵌套的键不会被搜索到

21、array_key_first

array_key_first---Gets the first key of an array(php7 >= 7.3)

说明:

mixed array_key_first(array $array)

Get the first key of the given array without affecting the internal array pointer.

参数:

array:An array

返回值:

returns the first key of array if the array is not empty;NULL otherwise.

22、array_key_last(php7 >= 7.3.0)

array_key_last-----Get the last key of an array

说明:

mixed array_key_last ( array $array )

Get the last key of the given array without affecting the internal array pointer.

参数:

array An array

返回值:

returns the last key of array if the array is not empty;NULL otherwise.

23、array_keys

array_keys ---返回数组中部分的或者所有的键名。

说明:

array array_keys(array $array,[, mixed $search_value = null [, bool $strict = false]])

array_keys()返回input数组中的数字或者字符串的键名。

如果指定了可选参数search_value,则只返回该值的键名。否则 input 数组中的所有键名都会被返回。

参数

input 一个数组,包含了要返回的键。

search_value

如果指定了这个参数,只有包含这些值的键才会被返回。

strict

判断在搜索的时候是否该使用严格的比较(===)。

返回值:

返回input里的所有键。

24、array_map

array_map --为数组的每个元素应用回调函数

说明:

array array_map(callable $callback, array $array1 [, array $...])

array_map():返回数组,是为array1每个元素应用callback函数之后的数组。callback函数形参的数量和传给array_map()数组数量,两者必须一样。

参数:

callback 回调函数,应用到每个数组里的每个元素。

array1 数组,遍历运行callback函数。

... 数组列表。每个都遍历运行callback函数。

返回值:

返回数组,包含 callback 函数处理之后 array1 的所有元素。

传入两个及以上的数组时,它们元素数量将会相同。因为回调函数会并行地处理相互对应的元素。如果几个数组的元素数量不一致:

空元素会扩展短那个数组,直到长度和最长的数组一样。

次函数有个有趣的用法:传入null作为回调函数的名称,将创建多维数组(一个数组,内部包含数组)

25、array_merge_recursive???????????????????????????

array_merge_recursive — 递归地合并一个或多个数组

说明:

array array_merge_recursive ( array $array1 [, array $... ] )

array_merge_recursive() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。

26、array_merge

array_merge---合并一个或多个数组。

说明

array array_merge ( array $array1 [, array $... ] )

array_merge()将一个或者多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。

如果输入的数组中有仙童的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。

如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

参数

array1 要合并的第一个数组。

... 要合并的数组列表。

返回值:返回结果数组

别忘了数字键名将会被重新编号!

如果你想完全保留原有数组并只想新的数组附加到后面,用+运算符。

第一个数组的键名将会被保留,在两个数组中存在相同的键名时,第一个数组中的同键名的元素将会被保留,第二个数组中的元素将会被忽略

array_merge()合并非数组的类型

$beginning = 'foo';

$end = array(1 => 'bar');

$result = array_merge((array)$beginning, (array)$end);

print_r($result);

27、array_multisort

array_multisort — 对多个数组或多维数组进行排序

28、array_pad()

array_pad— 以指定长度将一个值填充进数组

说明

array array_pad ( array $array , int $size , mixed $value )

array_pad()返回array的一个拷贝,并用value将其填补到size指定的长度。如果size为正,则填补

到数组的右侧,如果为负则从左侧开始填补。如果size的绝对值小于或者等于array数组的长度则没有任何填补。

有可能一次最多填补1048576个单元。

参数

array 需要被填充的原始数组。

size

新数组的长度。

value

将被填充的值,只有在array的现有长度小于size的长度时才有效。

返回值:

返回array用value填充到size指定的长度之后的一个副本。如果size为正,则填补到数组的右侧,如果为负

则从左侧开始填补。如果size的绝对值小于或者等于array数组的长度则没有任何填补。

29、array_pop

array_pop — 弹出数组最后一个单元(出栈)

说明:

mixed array_pop(array &$array)

array_pop()弹出并返回array数组的最后一个单元,并将数组array的长度减一。

note: 使用此函数后会重置(reset())array指针。

参数:

array 需要弹出栈的数组。

返回值array的最后一个值。如果array是空(如果不是一个数组),将会返回null。

错误/异常

调用此函数去处理非数组的值,会产生E_WARNING级别的错误。

30、array_product

array_product---计算数组中所有值的乘积

说明:

number array_product(array $array)

array_product()以整数或者浮点数返回一个数组中所有值的乘积。

参数:

array
这个数组

返回值:

以整数或者浮点数返回一个数组中所有值的乘积。

更新日志

在PHP5.3.6中 空数组现在回产生1,而之前次函数处理空数组会产生0.

31、array_push

array_push---将一个或者多个单元压入数组的末尾(入栈)

说明:

int array_push(array &$array, mixed $value1 [, $mixed $...])

array_push()将array当成一个栈,并将传入的变量压入array的末尾。array的长度将根据入栈变量的数目增加。

Note:如果用array_push()来给数组增加一个单元,还不如用$array[]=,因为这样没有调用函数的额外负担。

Note:如果第一个参数不是数组,array_()将会发出一条警告。这和$var[]的行为不同,后者会新建要给数组。

参数:

array

输入的数组。

value1

要压入array末尾的第一个值。

返回值:

返回处理之后数组的元素个数。

32、array_rand

array_rand---从数组随机取出一个或者多个单元

说明:

mixed array_rand(array $array [, int $num = 1])

从数组中取出一个或者多个随机的单元,并返回随机条目的一个或者多个键。它使用了伪随机数产生算法,所以不适合密码学场景。

参数:

array

输入的数组

num

指明了你想取出多个单元。

返回值

如果只取出一个,array_rand()返回随机单元的键名。否则就返回包含随机键名的数组。完成后,就可以根据随机的
键获取数组的随机值,取出数量如果超过array的长度,就会导致E_WARNING错误,并返回null。

更新日志

33、array_reduce

array_reduce--用回调函数迭代地将数组简化为单一的值。

说明:

mixed array_reduce (array $array, callable $callback [, mixed $initial = null])

array_reduce()将回调函数callback迭代地作用到array数组中的每一个单元中,从而将数组简化为单一的值。

参数

array

输入的array

callback

mixed callback(mixed $carray, mixed $item)

carray
携带上次迭代里的值;如果本次迭代是第一个,那么这个值initial。 item
携带了本次迭代的值。

initial

如果指定了可选参数initial 该参数将在处理开始前使用,或者当处理结束,数组为空时的最后一个结果。

返回值

返回结果值
initial 参数, array_reduce()返回null。

更新日志

在PHP版本5.3.0中,修改initial类型,允许传入mixed,之前只能是integer。

34、array_replace_recursive???????????

35、array_replace

array_replace --使用传递的数组替换第一个数组的元素

说明:

array array_replace(array $array1, array $array2 [, array $...])

array_replace()函数使用后面数组元素相同的key的值替换array1数组的值。如果一个键存才与第一个数组同时也存在于

第二个数组,它的值将被第二个数组中的值替换。如果一个键存在于第二个数组但是不存在与第一个数组,则会在第一个数组中

创建这个元素。如果一个键仅存在于第一个数组,它将保持不变。如果传递了多个替换数组,它们将被按顺序依次处理,后面的数组将覆盖之前的值。

array_replace()是非递归的:它将第一个数组的值进行替换而不管第二个数组是什么类型。

参数

array1

替换该数组的值。

array2

从此数组中提取替换值。

...

包含要提取元素的更多数组,后面的数组里的值会覆盖前面的值。

返回值:

返回一个数组,如果发生错误,将返回null。。

36、array_reverse

array_reverse---返回单元顺序相反的数组

说明:

array array_reverse(array $array, [, bool $preserve_keys = false])

array_reverse()接受数组array作为输入并返回一个单元为相反顺序的新数组。

参数

array
输入的数组
preserve_keys
如果设置为true会保留数字的键,非数字的键则不受这个设置的影响,总是会被保留

返回值

返回反转后的数组

38、array_search

array_search --在数组中搜索给定的值,如果成功则返回首个相应的键名

说明:

mixed array_search ( mixed $needle, array $haystack [, bool $strict = false])

大海劳针,在大海(haystack)中搜索针(needle参数)

参数:

needle

搜索的值

NOte:
如果needle是字符串,则比较以区分大小写的方式进行。

haystack

这个数组。

strict

如果可选的第三个strict为true,则array_search()将在haystack中检查完全相同的元素。

这意味着同样严格比较haystack里needle的类型,并且对象需是同一个实例。

返回值:

如果找到了needle则返回它的键,否则返回false。

如果needle在haystack中出现不止一次,则返回第一个匹配的键。要返回所有匹配值的键,应该用array_keys()

加上可选参数search_value来代替。

warning 此函数可能返回布尔值false,但也可能返回等同于false的非布尔值。

更新日志

php5.3.0 as with all internal PHP functions as of 5.3.0,array_search() returns null if invalid parameters are

passed to it.

in (php 5 >= 5.5.0) you don.t have to write your own function to search through a multi dimensional array

39、array_shift

array_shift ----将数组开头的单元移出数组。

说明:

mixed array_shift (array &$array)

array_shift 将array的第一个单元移出并作为结果返回,将array的长度减一并将所有其它单元向前移动一位。

所有的数字键名将改为从零开始计数,文字键名将不变。

Note: 将用此函数后会重置(reset())array指针。

参数

输入的数组

返回值

返回移出的值,如果array为空或者不是一个数组返回null。

40、array_slice

array_slice ---从数组中取出一段

说明

array array_slice(array $array, int $offset [, int $length = null [, bool $preserve_keys = false]])

array_slice()返回根据offset 和length参数所指定的array数组中的一段序列。

参数

array

输入的数组

offset
如果offset非负,则序列将从array中的此偏移量开始。如果offset为负,则序列将从array中距离末端这么远的地方开始。 length
如果给出了length并且为正,则序列中将具有这么多的单元。如果给出了length并且为负,则序列将终止在距离数组末端这么远的地方。
如果省略,则序列将从offset开始一直到array的末端。 preserve_keys
注意array_slice()默认会重新排序并重置数组的数字索引。你可以通过将preserve_keys设为true来改变此行为。

返回值

返回其中一段,如果offset参数大于array尺寸,就会返回空的array。

更新日志

在PHP5.2.4中,length 参数默认值改成null。现在length为null时,意思是说使用array的长度。之前的版本里,

null的length的意思是长度为零(啥也不返回)。

	在PHP5.0.2中,增加了可选参数prese_keys。

41、array_splice

array_splice ---去掉数组中的某一部分并用其它值取代

说明

array_splice ( array &$input, int $offset [, int $length = count($input) [, mixed $replacement = array()]])

把input数组中由offset和length指定的单元去掉,如果提供了replacement参数,则用其中的单元取代。

注意input中的数字键名不被保留。

Note:如果replacement 不是数组,会被类型转换成数组(例如(array)$replacement)。 当传入的replacement是个对象或者

null,会导致未知的行为出现。

参数

input

输入的数组

offset

如果offset为正,则从input数组中该值指定的偏移量开始移除。如果offset为负,则从input末尾倒数该值指定的偏移量开始移除。

length
如果省略length,则移除数组中从offset到结尾的所有部分。如果指定了length并且为正值,则移除这么多单元。如果指定了length
并且为负值,则移除offset到数组末尾倒数length为至中间所有的单元。如果设置了length为零,不会移除单元。
小窍门:当给出了replacement时要移除从offset到数组末尾所有单元时,用count($input)作为length。 replacement
如果给出了replacement数组,则被移除的单元被此数组中的单元替代。

返回值

返回一个包含有被移除单元的数组

42、array_sum

array_sum ---对数组中所有值求和

说明

number array_sum(array $array)

array_sum()将数组中的所有值相加,并返回结果。

参数

array

输入的数组

返回值

所有值的和以整数或者浮点数的结果返回,array为空时则返回0.

43、array_unique

array_unique --移除数组中重复的值

说明

array array_unique (array $array [, int $sort_flags = SORT_STRING])

array_unique()接受array作为输入并返回没有重复值的新数组。

注意键名保留不变。array_unique()先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,

接着忽略所有后面的键名,这并不意味着在未排序的array中同一个只的第一个出现的键名会被保留。

Note: 当且仅当(string) $elem1 === (string) $elem2 时两个单元被认为相同,例如,字符串表达式一样时,会使用首个元素。

参数

array

输入的数组

sort_flags
第二个可先参数sort_flags可用于修改排序行为。 排序类型标记:
①、SORT_REGULAR---按照通常方法比较(不修改类型)
②、SORT_NUMBERIC---按照数字形式比较
③、SORT_STRING---按照字符串形式比较
④、SORT_LOCATE_STRING --根据当前的本地化设置,按照字符串比较。

返回值

返回过滤后的数组

更新日志

在PHP5.2。10 修改回sort_flags的默认值为SORT_STRING.

44、array_unshift

array_unshift --在数组开头插入一个作者多个单元

说明

int array_unshift(array &$array, mixed $value1 [, mixed $...])

array_unshift()将传入的单元插入到array数组的开头。注意单元是作为整体被插入的,因此初入单元将保持同样的顺序。

所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。

参数

array

输入的数组

value1
开头插入的变量

返回值

返回array数组新的单元数目

45、array_values

array_values----返回数组中所有的值

说明

array array_values(array $array)

array_values()返回input数组中所有的值并给其建立数字索引。

参数

array

数组

返回值

返回所有值的索引数组

46、array_walk

array_walk --使用用户自定义函数对数组中每个元素做回调处理

说明

bool array_walk (array &$array, callbale $callback [, mixed $userdata = null])

将用户自定义函数funcname应用到array数组中的每个单元。

array_walk() 不会受到array内部数组指针的影响,array_walk()会遍历整个数组而不管指针的位置。

参数

array

输入的数组

callback
典型情况下callback接受两个参数。array参数的值作为第一个,键名作为第二个。 note:
如果callback需要直接作用域数组中的值,则给callback的第一个参数指定为引用,这样任何对这些单元的改变也将会改变原始数组本身。 note: 参数数量超过预期,传入内置函数(例如strtolower()),将抛出警告,所以不适合当做funcname。 只有array的值才可以被改变,用户不应该再回调函数中改变该数组本身的结构,例如增加/删除单元,
unset单元等等,如果array_walk()作用域数组改变了,则此函数的行为未经定义,并且不可预期。 userdata
如果提供了可选参数userdata,将被作为第三个参数传递个callback funcname。

返回值

成功时返回true, 或者失败时返回false

错误/异常

如果callback函数需要的参数比给出的多,则每次array_walk()调用callback时都会产生一个E_WARNING级别的错误。

46、array

array --新建一个数组

说明: array array([mixed $...])

创建一个数组,关于数组是什么的信息请阅读数组一节。

参数

...

语法“index =>values”,用逗号分开,定义了索引和值,索引可以是字符串或者数字,如果省略了索引,会自动产生从0开始的整数索引,
如果索引是整数,则下一个产生的索引将是目前最大的整数索引+1,注意如果定义了两个完全一样的索引,则后面一个会覆盖前一个, 在最后一个定义的数组项目之后加一个逗号虽然不常见吗,却是合法的语法。

返回值

返回根据参数建立的数组。参数可以用==》运算符给出索引。关于数组是什么的信息阅读数组一节。

注释

note:

array()是一个语言结构,用于字面上表示数组,不是常规的函数。

47、arsort

arsort---对数组进行逆向排序并保持索引关系

说明

bool arsort (array &$array [, int $sort_flags = SORT_REGULAR])

本函数对数组进行排序,数组的索引保持和单元的关联。

主要用对于那些单元顺序很重要的结合数组进行排序。

note:

if two members compare as equal, their relative order in the sorted array is undefined.

参数

array

输入的数组

sort_flags

可以用可选的参数sort_flags改变排序的行为,

返回值

成功时返回true,或者在失败时返回false

$fruits = [

'd' => 'lemon',

'a' => 'orange',

'b' => 'banana',

'c' => 'apple',

];

arsort($fruits);

foreach ( $fruits as $key => $val )

{

echo "$key = $val\n":

}

fruits 被按照字母顺序逆向排序,并且单元的索引关系不变。

48、asort

asort --对数组进行排序并保持索引关系

说明

bool asort (array &$array [, int $sort_flags = SORT_REGULAR])

本函数对数组进行排序,数组的索引保持和单元的关系。主要用于对那些单元顺序很重要的

结合数组进行排序。

note:

if two members compare as equal, their relative order in the sorted array is undefined.

参数

array

输入的数组

sort_flags

可以用可选的参数sort_flags改变排序的行为,详情见sort().

返回值

成功时返回true,或者在失败时返回false。

fruits被按照字母顺序排序,并且单元的索引关系不变。

49、compact

compact ---建立一个数组,包括变量名和它们的值

说明

array compact (mixed $varname1 [, mixed $...])

创建一个包含变量和其值的数组。

对每个参数,compact()在当前的符号表中查找该变量名并将它添加到输出的数组中,变量名成为键名而

变量的内容成为该键的值。简单说,它做的事和extract()正好相反。返回将所有变量添加进去后的数组。

任何没有变量名和之对应的字符串都被略过。

参数

varname1

compact()接受可变的参数数目。每个参数可以是一个包括变量名的字符串或者是一个包含变量名的数组,该数组中还可以包含其他

单元内容变量名的数组,compact()可以递归处理。

返回值

返回输出的数组,包含了添加的所有变量。

注释

Note:Gotcha

因为可变变量也许不能在函数内部用于PHP的超全局数组,此时不能讲超全局数组传递入compact()中。

50、count

count---计算数组中的单元数目,或者对象中的属性个数

说明

int count(mixed $array_or_countable [, int $mode = COUNT_NORMAL])

统计出数组里的所有元素的数量,或者对象里的东西。

对于对象,如果安装了SPL,可以通过实现Countable接口对count()挂钩(hook)。该接口只有一个方法Countable::count(),此方法为count()函数返回值。

关于PHP中如何实现和使用数组可以参考手册中数组章节中的详细描述。

参数

array_or_countable

数组或者Countable对象。

mode

如果可选的mode参数设为COUNT_RECURSIVE(或者1),count()将递归地对数组计数。对计数多维数组的所有单元尤其有用。

	Caution count()能检测递归来避免无限循环,但每次出现时会产生E_WARNING错误(如果array不止一次包含了自身)并返回大于预期的统计数字。

返回值

返回array_or_countable中的单元数目。如果参数既不是数组,也不是实现Countable接口的对象,将返回1.

有个例外:如果array_or_countable是null则结果是0.

Caution count()对没有初始化的变量返回0,但对于空的数组也会返回0.用isset()来测试变量是否已经初始化。

51、current

current ---返回数组中的当前单元

说明

mixed current (array &$array)

每个数组中都有一个内部的指针指向它“当前的”单元,初始指向插入到数组中的第一个单元。

参数

array

这个数组

返回值

current()函数返回当前被内部指针指向的数组单元的值,并不移动指针。如果内部指针指向超出了单元列表

的末端。

current()返回false。

Warning 此函数可能返回布尔值false,但也可能返回等同于false的非布尔值。

请阅读布尔值类型章节以获取更多信息。应使用===运算符来测试此函数的返回值。

注释

Note:

如果数组包含Boolean false 的单元则本函数再碰到这个也返回false。使得不可能判断是否到了此数组列表的末端。

要正确遍历可能含有空单元的数组,用each()函数。

52、each

each---返回数组中当前的键/值对并数组指针向前移动一步

Warning This function has been DEPRECATED as of PHP 7.2.0,Relying on this function is highly discouraged。

说明

array each (array &$array)

返回数组中当前的键/值对并将数组指针向前移动一步

在执行each()之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。

如果要再用each遍历数组,必须使用reset()。

参数

array

输入的数组

返回值

返回array数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为0,1,key和value。单元0和key包含有数组单元

的键名,1和value包含有数据。

如果内部指针超过了数组的末端,则each()返回false。

each()经常和list()结合使用来遍历数组,

Caution:因为讲一个数组赋值给另一个数组时会重置原来的数组指针,因此在上边的例子中如果我们在循序

内部将$fruits赋给了另一个变量的话将会导致无限循环。

Warning each()will alse accept objects,but may return unexpected results。its therefore not recommend

to iterate though object properties with each()。

参见

53、end

end--将数组的内部指针指向最后一个单元

说明

mixed end(array &$array)

end()将array的内部指针移动到最后一个单元并返回其值。

参数

array

这个数组。该数组是通过引用传递的,因为它会被这个函数修改。这意味着你必须传入一个真正的变量,而不是函数返回的数组,因为只有

真正的变量才能以引用传递。

返回值

返回值最后一个元素的值,或者如果是空数组则返回false。

51、extract

extract--从数组中将变量导入到当前的符号表

说明

int extract ( array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL])

本函数用来将变量从数组中导入当前的符号表中。
检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突。

参数

array

一个关联数组。此函数会将键名当作变量名,值作为变量的值。对每个键/值对都会在当前的符号表中建立变量,

并受到flags和prefix参数的影响。

	必须使用关联数组,数字索引的数组将不会产生结果,除非用了EXTR_PREFIX_ALL或者EXTR_PREFIX_INVALID.

flags
对待非法/数字和冲突的键名的方法根据取出标记flags参数决定。可以是以下值之一: EXTR_OVERWRITE 如果有冲突,覆盖已有的变量。 EXTR_SKIP
如果有冲突,在变量名前加上前缀prefix。 EXTR_PREFIX_SAME
如果有冲突,在变量名前加上前缀prefix。
EXTR_PREFIX_ALL
给所有变量名加上前缀prefix。 EXTR_PREFIX_INVALID
仅在非法/数字的变量名前加上前缀prefix。 EXTR_IF_EXISTS
仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。举个例子,以下抢矿非常有用:
定义一些有效变量,然后从$_REQUEST中仅导入这些已定义的变量。 EXTR_REFS
将变量作为引用提取。这有力地表明了导入的变量任然引用了array参数的值。可以单独使用这个标志
或者在flags中用or和其它任何标志结合使用。

prefix

注意prefix仅在flags的值是EXTR_RREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID或者EXTR_PREFIX_IF_EXISTS时需要。如果附加了前缀后的结构不是

合法的变量名,将不会导入到符号表中。前缀和数组键名之间会自动加上一个下划线。

返回值array的最后一个值。如果array是空(如果不是一个数组),将会返回null。

返回值成功导入符号表中的变量数组,

52、in_array

in_array---检查数组中是否存在某个值

说明

bool in_array(mixed $needle, array $haystack [, bool $strict = FALSE ])