PHP数组函数,摘录于PHP手册
函数名称 | 解释 |
---|---|
array_change_key_case | 将数组中的所有键名修改为全大写或小写 |
array_chunk | 将一个数组分割成多个 |
array_column | 返回数组中指定的一列 |
array_combine | 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 |
array_count_values | 统计数组中所有的值 |
array_fill_keys | 使用指定的键和值填充数组 |
array_fill | 用给定的值填充数组 |
array_filter | 用回调函数过滤数组中的单元 |
array_flip | 交换数组中的键和值 |
array_key_exists | 检查数组里是否有指定的键名或索引 |
array_keys | 返回数组中部分的或所有的键名 |
array_map | 为数组的每个元素应用回调函数 |
array_merge | 合并一个或多个数组 |
array_merge_recursive | 递归地合并一个或多个数组 |
array_multisort | 对多个数组或多维数组进行排序 |
array_pad | 以指定长度将一个值填充进数组 |
array_pop | 弹出数组最后一个单元(出栈) |
array_product | 计算数组中所有值的乘积 |
array_push | 将一个或多个单元压入数组的末尾(入栈) |
array_rand | 从数组中随机取出一个或多个单元 |
array_reduce | 用回调函数迭代地将数组简化为单一的值 |
array_replace | 使用传递的数组替换第一个数组的元素 |
array_replace_recursive | 使用传递的数组递归替换第一个数组的元素 |
array_reverse | 返回单元顺序相反的数组 |
array_search | 在数组中搜索给定的值,如果成功则返回首个相应的键名 |
array_shift | 将数组开头的单元移出数组 |
array_slice | 从数组中取出一段 |
array_splice | 去掉数组中的某一部分并用其它值取代 |
array_sum | 对数组中所有值求和 |
array_udiff_assoc | 带索引检查计算数组的差集,用回调函数比较数据 |
array_udiff_uassoc | 带索引检查计算数组的差集,用回调函数比较数据和索引 |
array_udiff | 用回调函数比较数据来计算数组的差集 |
array_unique | 移除数组中重复的值 |
array_unshift | 在数组开头插入一个或多个单元 |
array_values | 返回数组中所有的值 |
array_walk | 使用用户自定义函数对数组中的每个元素做回调处理 |
array_walk_recursive | 对数组中的每个成员递归地应用用户函数 |
array | 新建一个数组 |
arsort | 对数组进行逆向排序并保持索引关系 |
asort | 对数组进行排序并保持索引关系 |
compact | 建立一个数组,包括变量名和它们的值 |
count | 计算数组中的单元数目,或对象中的属性个数 |
current | 返回数组中的当前单元 |
each | 返回数组中当前的键/值对并将数组指针向前移动一步 |
end | 将数组的内部指针指向最后一个单元 |
extract | 从数组中将变量导入到当前的符号表 |
in_array | 检查数组中是否存在某个值 |
key_exists | 别名 array_key_exists |
key | 从关联数组中取得键名 |
krsort | 对数组按照键名逆向排序 |
ksort | 对数组按照键名排序 |
list | 把数组中的值赋给一组变量 |
next | 将数组中的内部指针向前移动一位 |
pos | current 的别名 |
prev | 将数组的内部指针倒回一位 |
range | 根据范围创建数组,包含指定的元素 |
reset | 将数组的内部指针指向第一个单元 |
rsort | 对数组逆向排序 |
shuffle | 打乱数组 |
sizeof | count 的别名 |
sort | 对数组排序 |
uasort | 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 |
uksort | 使用用户自定义的比较函数对数组中的键名进行排序 |
usort | 使用用户自定义的比较函数对数组中的值进行排序 |
1、array_change_key_case
(PHP 4 >= 4.2.0, PHP 5, PHP 7)
array_change_key_case — 将数组中的所有键名修改为全大写或小写
- 说明
array array_change_key_case ( array $array [, int $case = CASE_LOWER ] )
array_change_key_case() 将 array 数组中的所有键名改为全小写或大写。本函数不改变数字索引。 - 参数
array:需要操作的数组。
case:可以在这里用两个常量,CASE_UPPER 或 CASE_LOWER(默认值)。 - 返回值
返回一个键全是小写或者全是大写的数组;如果输入值(array)不是一个数组,那么返回FALSE - 错误/异常
如果输入值(array)不是一个数组,就会抛出一个错误警告(E_WARNING) - 范例
1, "SecOnd" => 4);
print_r(array_change_key_case($input_array, CASE_UPPER));
?>
以上例程会输出:
Array
(
[FIRST] => 1
[SECOND] => 4
)
2、array_chunk
(PHP 4 >= 4.2.0, PHP 5, PHP 7)
array_chunk — 将一个数组分割成多个
- 说明
array array_chunk ( array $array , int $size [, bool $preserve_keys = false ] )
将一个数组分割成多个数组,其中每个数组的单元数目由 size 决定。最后一个数组的单元数目可能会少于 size 个。 - 参数
array:需要操作的数组
size:每个数组的单元数目
preserve_keys:设为 TRUE,可以使 PHP 保留输入数组中原来的键名。如果你指定了 FALSE,那每个结果数组将用从零开始的新数字索引。默认值是 FALSE。 - 返回值
得到的数组是一个多维数组中的单元,其索引从零开始,每一维包含了 size 个元素。 - 错误/异常
如果 size 小于 1,会抛出一个 E_WARNING 错误并返回 NULL。 - 范例
以上例程会输出:
Array
(
[0] => Array
(
[0] => a
[1] => b
)
[1] => Array
(
[0] => c
[1] => d
)
[2] => Array
(
[0] => e
)
)
Array
(
[0] => Array
(
[0] => a
[1] => b
)
[1] => Array
(
[2] => c
[3] => d
)
[2] => Array
(
[4] => e
)
)
- 参见
array_slice() - 从数组中取出一段
3、array_column
(PHP 5 >= 5.5.0, PHP 7)
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() 魔术方法。
column_key
需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键,也可以是属性名。 也可以是NULL,此时将返回整个数组(配合index_key参数来重置数组键的时候,非常管用)
index_key
作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。 - 返回值
从多维数组中返回单列数组。 - 范例 从结果集中取出first names列
2135,
'first_name' => 'John',
'last_name' => 'Doe',
),
array(
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
),
array(
'id' => 5342,
'first_name' => 'Jane',
'last_name' => 'Jones',
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
)
);
$first_names = array_column($records, 'first_name');
print_r($first_names);
?>
以上例程会输出:
Array
(
[0] => John
[1] => Sally
[2] => Jane
[3] => Peter
)
4、array_combine
(PHP 5, PHP 7)
array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
说明
array array_combine ( array $keys , array $values )
返回一个 array,用来自 keys 数组的值作为键名,来自 values 数组的值作为相应的值。参数
keys
将被作为新数组的键。非法的值将会被转换为字符串类型(string)。
values
将被作为 Array 的值。返回值
返回合并的 array,如果两个数组的单元数不同则返回 FALSE。错误/异常
如果作为keys的数组和作为values的数组的元素个数不一样,将会抛出一个警告错误(E_WARNING)。范例 一个 array_combine() 简单的例子
以上例程会输出:
Array
(
[green] => avocado
[red] => apple
[yellow] => banana
)
5、array_count_values
(PHP 4, PHP 5, PHP 7)
array_count_values — 统计数组中所有的值
- 说明
array array_count_values ( array $array )
array_count_values() 返回一个数组: 数组的键是 array 里单元的值; 数组的值是 array 单元的值出现的次数。 - 参数
input
统计这个数组的值 - 返回值
返回一个关联数组,用 array 数组中的值作为键名,该值在数组中出现的次数作为值。 - 错误/异常
对数组里面的每个不是 string 和 integer 类型的元素抛出一个警告错误(E_WARNING)。 - 范例
以上例程会输出:
Array
(
[1] => 2
[hello] => 2
[world] => 1
)
6、array_fill_keys
(PHP 5 >= 5.2.0, PHP 7)
array_fill_keys — 使用指定的键和值填充数组
- 说明
array array_fill_keys ( array $keys , mixed $value )
使用 value 参数的值作为值,使用 keys 数组的值作为键来填充一个数组。 - 参数
keys:使用该数组的值作为键。非法值将被转换为字符串。
value:填充使用的值。 - 返回值
返回填充后的数组。 - 范例
以上例程会输出:
Array
(
[foo] => banana
[5] => banana
[10] => banana
[bar] => banana
)
7、array_fill
(PHP 4 >= 4.2.0, PHP 5, PHP 7)
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。 - 说明
5.6.0 num 现在可以是零。 之前 num 必须大于零。 - 范例
以上例程会输出:
Array
(
[5] => banana
[6] => banana
[7] => banana
[8] => banana
[9] => banana
[10] => banana
)
Array
(
[-2] => pear
[0] => pear
[1] => pear
[2] => pear
)
8、array_filter
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
array_filter — 用回调函数过滤数组中的单元
- 说明
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。 - 参数
array:要循环的数组
callback:使用的回调函数,如果没有提供 callback 函数, 将删除 array 中所有等值为 FALSE 的条目。更多信息见转换为布尔值。
flag:决定callback接收的参数形式:ARRAY_FILTER_USE_KEY - callback接受键名作为的唯一参数
ARRAY_FILTER_USE_BOTH - callback同时接受键名和键值 - 返回值
返回过滤后的数组。 - 范例
1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);
echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));
?>
以上例程会输出:
Odd :
Array
(
[a] => 1
[c] => 3
[e] => 5
)
Even:
Array
(
[0] => 6
[2] => 8
[4] => 10
[6] => 12
)
9、array_flip
(PHP 4, PHP 5, PHP 7)
array_flip — 交换数组中的键和值
- 说明
array array_flip ( array $array )
array_flip() 返回一个反转后的 array,例如 array 中的键名变成了值,而 array 中的值成了键名。
注意 array 中的值需要能够作为合法的键名(例如需要是 integer 或者 string)。如果类型不对,将出现一个警告,并且有问题的键/值对将不会出现在结果里。
如果同一个值出现多次,则最后一个键名将作为它的值,其它键会被丢弃。 - 参数
array:要交换键/值对的数组。 - 返回值
成功时返回交换后的数组,如果失败返回 NULL。 - 范例
以上例程会输出:
Array
(
[oranges] => 0
[apples] => 1
[pears] => 2
)
10、array_key_exists
(PHP 4 >= 4.0.7, PHP 5, PHP 7)
array_key_exists — 检查数组里是否有指定的键名或索引
- 说明
bool array_key_exists ( mixed $key , array $array )
数组里有键 key 时,array_key_exists() 返回 TRUE。 key 可以是任何能作为数组索引的值。 - 参数
key:要检查的键。
array:一个数组,包含待检查的键。 - 返回值
成功时返回 TRUE, 或者在失败时返回 FALSE。 - Note:
array_key_exists() 仅仅搜索第一维的键。 多维数组里嵌套的键不会被搜索到。 - 范例
1, 'second' => 4);
if (array_key_exists('first', $search_array)) {
echo "The 'first' element is in the array";
}
?>
11、array_keys
(PHP 4, PHP 5, PHP 7)
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 里的所有键。 - 范例
100, "color" => "red"];
print_r(array_keys($array));
$array = ["blue", "red", "green", "blue", "blue"];
print_r(array_keys($array, "blue"));
$array = [
"color" => ["blue", "red", "green"],
"size" => ["small", "medium", "large"]
];
print_r(array_keys($array));
?>
以上例程会输出:
Array
(
[0] => 0
[1] => color
)
Array
(
[0] => 0
[1] => 3
[2] => 4
)
Array
(
[0] => color
[1] => size
)
12、array_map
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
array_map — 为数组的每个元素应用回调函数
- 说明
array array_map ( callable $callback , array $array1 [, array $... ] )
array_map():返回数组,是为 array1 每个元素应用 callback函数之后的数组。 callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样。 - 参数
callback:回调函数,应用到每个数组里的每个元素。
array1:数组,遍历运行 callback 函数。
...:数组列表,每个都遍历运行 callback 函数。 - 返回值
返回数组,包含 callback 函数处理之后 array1 的所有元素。 - 范例
这使得 $b 成为:
Array
(
[0] => 1
[1] => 8
[2] => 27
[3] => 64
[4] => 125
)
13、array_merge
(PHP 4, PHP 5, PHP 7)
array_merge — 合并一个或多个数组
- 说明
array array_merge ( array $array1 [, array $... ] )
array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。 - 参数
array1:要合并的第一个数组。
...:要合并的数组列表。 - 返回值
返回结果数组。 - 范例
"red", 2, 4];
$array2 = ["a", "b", "color" => "green", "shape" => "trapezoid", 4];
$result = array_merge($array1, $array2);
print_r($result);
?>
以上例程会输出:
Array
(
[color] => green
[0] => 2
[1] => 4
[2] => a
[3] => b
[shape] => trapezoid
[4] => 4
)
14、array_merge_recursive
(PHP 4 >= 4.0.1, PHP 5, PHP 7)
array_merge_recursive — 递归地合并一个或多个数组
- 说明
array array_merge_recursive ( array $array1 [, array $... ] )
array_merge_recursive() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去,这将递归下去,因此如果一个值本身是一个数组,本函数将按照相应的条目把它合并为另一个数组。然而,如果数组具有相同的数组键名,后一个值将不会覆盖原来的值,而是附加到后面。 - 参数
array1:要合并的初始数组。
...:数组变量列表,进行递归合并。 - 返回值
一个结果数组,其中的值合并自附加的参数。 - 范例
['favorite'=>'red'], 5];
$array2 = ['a','color' => ['favorite'=>'green','blue']];
$result = array_merge_recursive($array1, $array2);
print_r($result);
?>
以上例程会输出:
Array
(
[color] => Array
(
[favorite] => Array
(
[0] => red
[1] => green
)
[0] => blue
)
[0] => 5
[1] => a
)
15、array_multisort
(PHP 4, PHP 5, PHP 7)
array_multisort — 对多个数组或多维数组进行排序
- 说明
bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )
array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。
关联(string)键名保持不变,但数字键名会被重新索引。
Note:
If two members compare as equal, their relative order in the sorted array is undefined.
如果两个成员相等,它们在排序数组中的相对顺序是未定义的。 - 参数
array1:要排序的 array。
array1_sort_order:之前 array 参数要排列的顺序。 SORT_ASC 按照上升顺序排序, SORT_DESC 按照下降顺序排序。
此参数可以和 array1_sort_flags 互换,也可以完全删除,默认是 SORT_ASC 。
array1_sort_flags:为 array 参数设定选项:
排序类型标志:
ORT_REGULAR - 将项目按照通常方法比较(不修改类型)
ORT_NUMERIC - 按照数字大小比较
ORT_STRING - 按照字符串比较
ORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 它会使用 locale 信息,可以通过 setlocale() 修改此信息。
ORT_NATURAL - 以字符串的"自然排序",类似 natsort()
ORT_FLAG_CASE - 可以组合 (按位或 OR) SORT_STRING 或者 SORT_NATURAL 大小写不敏感的方式排序字符串。
参数可以和 array1_sort_order 交换或者省略,默认情况下是 SORT_REGULAR。
...
可选的选项,可提供更多数组,跟随在 sort order 和 sort flag 之后。 提供的数组和之前的数组要有相同数量的元素。 换言之,排序是按字典顺序排列的。 - 返回值
成功时返回 TRUE, 或者在失败时返回 FALSE - 更新日志
版本 | 说明 |
---|---|
5.4.0 | array1_sort_flags 增加 SORT_NATURAL 和 SORT_FLAG_CASE 选项 |
5.3.0 | array1_sort_flags 增加选项 SORT_LOCALE_STRING |
- 范例
int(0)
[1]=> int(10)
[2]=> int(100)
[3]=> int(100)
}
array(4) {
[0]=> int(4)
[1]=> int(1)
[2]=> int(2)
[3]=> int(3)
}
*/
?>
16、array_pad
(PHP 4, PHP 5, PHP 7)
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 数组的长度则没有任何填补。 - 范例
17、array_pop
(PHP 4, PHP 5, PHP 7)
array_pop — 弹出数组最后一个单元(出栈)
- 说明
mixed array_pop ( array &$array )
array_pop() 弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。
Note: 使用此函数后会重置(reset())array 指针。 - 参数
array:需要做出栈的数组。 - 返回值
返回 array 的最后一个值。如果 array 是空(如果不是一个数组),将会返回 NULL 。 - 错误/异常
调用此函数去处理非数组的值,会产生 E_WARNING 级别的错误。 - 范例
orange
* [1] => banana
* [2] => apple
* )
*/
?>
18、array_product
(PHP 5 >= 5.1.0, PHP 7)
array_product — 计算数组中所有值的乘积
- 说明
number array_product ( array $array )
array_product() 以整数或浮点数返回一个数组中所有值的乘积。 - 参数
array:这个数组。 - 返回值
以整数或浮点数返回一个数组中所有值的乘积。 - 更新日志
5.3.6 空数组现在会产生 1,而之前此函数处理空数组会产生 0。 - 范例
19、array_push
(PHP 4, PHP 5, PHP 7)
array_push — 将一个或多个单元压入数组的末尾(入栈)
- 说明
int array_push ( array &$array , mixed $value1 [, mixed $... ] )
array_push() 将 array 当成一个栈,并将传入的变量压入 array 的末尾。array 的长度将根据入栈变量的数目增加。和如下效果相同:
并对每个传入的值重复以上动作。
Note: 如果用 array_push() 来给数组增加一个单元,还不如用 $array[] = ,因为这样没有调用函数的额外负担。
Note: 如果第一个参数不是数组,array_push() 将发出一条警告。这和 $var[] 的行为不同,后者会新建一个数组。
- 参数
array:输入的数组。
value1:要压入 array 末尾的第一个值。 - 返回值
返回处理之后数组的元素个数。 - 范例
orange
* [1] => banana
* [2] => apple
* [3] => raspberry
* )
*
***************************/
?>
20、array_rand
(PHP 4, PHP 5, PHP 7)
array_rand — 从数组中随机取出一个或多个单元
- 说明
mixed array_rand ( array $array [, int $num = 1 ] )
从数组中取出一个或多个随机的单元,并返回随机条目的一个或多个键。 它使用了伪随机数产生算法,所以不适合密码学场景, - 参数
array:输入的数组。
num:指明了你想取出多少个单元。 - 返回值
如果只取出一个,array_rand() 返回随机单元的键名。 否则就返回包含随机键名的数组。 完成后,就可以根据随机的键获取数组的随机值。 取出数量如果超过 array 的长度,就会导致 E_WARNING 错误,并返回 NULL。 - 更新日志
版本 | 说明 |
---|---|
7.1.0 | 内置的随机数生成算法从 libc rand 函数改成 梅森旋转 伪随机数生成算法。 |
5.2.10 | The resulting array of keys is no longer shuffled. |
- 范例