array_column
功能
返回数组中指定一列。
说明
array_column ( array $input , mixed $column_key [, mixed $index_key = null ] ) : array
array_column 返回 input 数组中键值为 column_key 的列,如果指定了可选参数 index_key,那么 input 数组中的这一列的值将作为返回数组中对应值的键。
参数
input
需要取出数组列的多维数组。 如果提供的是包含一组对象的数组,只有 public 属性会被直接取出。 为了也能取出 private 和 protected 属性,类必须实现 __get() 和 __isset() 魔术方法。
column_key
需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键,也可以是属性名。 也可以是 NULL,此时将返回整个数组(配合 index_key 参数来重置数组键的时候,非常管用)
index_key
作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。
返回值
从多维数组中返回单列数组。
array_merge
合并一个或多个数组。
说明
array_merge ( array $array1 [, array $... ] ) : array
array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
参数
array1
要合并的第一个数组。
...
要合并的数组列表。
返回值
返回结果数组。
array_diff
计算数组的差集
说明
array_diff ( array $array1 , array $array2 [, array $... ] ) : array
对比 array1 和其他一个或者多个数组,返回在 array1 中但是不在其他 array 里的值。
参数
array1
要被对比的数组
array2
和这个数组进行比较
...
更多相比较的数组
返回值
返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。
array_filter
用回调函数过滤数组中的单元
说明
array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ) : array
依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
参数
array
要循环的数组
callback
使用的回调函数
如果没有提供 callback 函数, 将删除 array 中所有等值为 FALSE 的条目。更多信息见转换为布尔值。
flag
决定 callback 接收的参数形式:
- ARRAY_FILTER_USE_KEY - callback 接受键名作为的唯一参数
- ARRAY_FILTER_USE_BOTH - callback 同时接受键名和键值
返回值
返回过滤后的数组。
示例
$filterArray = array_filter($itemList, function ($item) {
return $item['item_type'] == 1;
});
array_pop
(PHP 4,PHP 5,PHP 7)弹出数组最后一个单元(出栈)
说明
array_pop ( array &$array ) : mixed
array_pop() 弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。
Note: 使用此函数后会重置(reset())array 指针。
参数
array
需要弹出栈的数组。
返回值
返回 array 的最后一个值。如果 array 是空(如果不是一个数组),将会返回 NULL 。
错误/异常
调用此函数去处理非数组的值,会产生 E_WARNING 级别的错误。
array_push
(PHP 4,PHP 5,PHP 7)
将一个或多个单元压入数组的末尾(入栈)
说明
array_push ( array &$array , mixed $value1 [, mixed $... ] ) : int
array_push() 将 array 当成一个栈,并将传入的变量压入 array 的末尾。array 的长度将根据入栈变量的数目增加。和如下效果相同:
<?php
$array[] = $var;
?>
并对每个传入的值重复以上动作。
Note: 如果用 array_push() 来给数组增加一个单元,还不如用 $array[] = ,因为这样没有调用函数的额外负担。
Note: 如果第一个参数不是数组,array_push() 将发出一条警告。这和 $var[] 的行为不同,后者会新建一个数组。
参数
array
输入的数组。
value1
要压入 array 末尾的第一个值。
返回值
返回处理之后数组的元素个数。
array_rand
(PHP 4, PHP 5, PHP 7)
从数组中随机取出一个或多个单元
说明
array_rand ( array $array [, int $num = 1 ] ) : mixed
从数组中取出一个或多个随机的单元,并返回随机条目的一个或多个键。 它使用了伪随机数产生算法,所以不适合密码学场景,
参数
array
输入的数组。
num
指明了你想取出多少个单元。
返回值
如果只取出一个,array_rand() 返回随机单元的键名。 否则就返回包含随机键名的数组。 完成后,就可以根据随机的键获取数组的随机值。 取出数量如果超过 array 的长度,就会导致 E_WARNING 错误,并返回 NULL。
示例
<?php
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
var_dump(array_rand($input,2));
?>
//返回
array(2) {
[0]=>
int(0)
[1]=>
int(1)
}
<?php
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
var_dump(array_rand($input));
?>
//返回
int(1)
array_reverse
(PHP 4, PHP 5, PHP 7)
返回单元顺序相反的数组
说明
array_reverse ( array $array [, bool $preserve_keys = FALSE ] ) : array
array_reverse() 接受数组 array 作为输入并返回一个单元为相反顺序的新数组。
参数
array
输入的数组。
preserve_keys
如果设置为 TRUE 会保留数字的键。 非数字的键则不受这个设置的影响,总是会被保留。
返回值
返回反转后的数组。
array_shift
(PHP 4, PHP 5, PHP 7)
将数组开头的单元移出数组
说明
array_shift ( array &$array ) : mixed
array_shift() 将 array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。
Note: 使用此函数后会重置(reset())array 指针。
参数
array
输入的数组。
返回值
返回移出的值,如果 array 为 空或不是一个数组则返回 NULL。
array_slice
(PHP 4, PHP 5, PHP 7)
从数组中取出一段
说明
array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] ) : array
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。
范例
Example 1 array_slice() 例子
<?php
$input = array("a", "b", "c", "d", "e");
$output = array_slice($input, 2); // returns "c", "d", and "e"
$output = array_slice($input, -2, 1); // returns "d"
$output = array_slice($input, 0, 3); // returns "a", "b", and "c"
// note the differences in the array keys
print_r(array_slice($input, 2, -1));
print_r(array_slice($input, 2, -1, true));
?>
以上例程会输出:
Array
(
[0] => c
[1] => d
)
Array
(
[2] => c
[3] => d
)
array_splice
(PHP 4, PHP 5, PHP 7)
去掉数组中的某一部分并用其它值取代
说明
array_splice ( array &$input , int $offset [, int $length = count($input) [, mixed $replacement = array() ]] ) : 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 数组,则被移除的单元被此数组中的单元替代。
如果 offset 和 length 的组合结果是不会移除任何值,则 replacement 数组中的单元将被插入到 offset 指定的位置。 注意替换数组中的键名不保留。
如果用来替换 replacement 只有一个单元,那么不需要给它加上 array(),除非该单元本身就是一个数组、一个对象或者 NULL。
返回值
返回一个包含有被移除单元的数组。
范例
Example 1 array_splice() 例子
<?php
$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);
// $input is now array("red", "green")
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, -1);
// $input is now array("red", "yellow")
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, count($input), "orange");
// $input is now array("red", "orange")
$input = array("red", "green", "blue", "yellow");
array_splice($input, -1, 1, array("black", "maroon"));
// $input is now array("red", "green",
// "blue", "black", "maroon")
$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input is now array("red", "green",
// "blue", "purple", "yellow");
?>
Example 2 array_splice() 例子
以下表达式以同样方式修改了 $input:
<?php
// 添加两个新元素到 $input
array_push($input, $x, $y);
array_splice($input, count($input), 0, array($x, $y));
// 移除 $input 中的最后一个元素
array_pop($input);
array_splice($input, -1);
// 移除 $input 中第一个元素
array_shift($input);
array_splice($input, 0, 1);
// 在 $input 的开头插入一个元素
array_unshift($input, $x, $y);
array_splice($input, 0, 0, array($x, $y));
// 在 $input 的索引 $x 处替换值
$input[$x] = $y; // 对于键名和偏移量等值的数组
array_splice($input, $x, 1, $y);
?>
array_unique
(PHP 4 >= 4.0.1, PHP 5, PHP 7)
移除数组中重复的值
说明
array_unique ( array $array [, int $sort_flags = SORT_STRING ] ) : array
array_unique() 接受 array 作为输入并返回没有重复值的新数组。
注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。
Note: 当且仅当
(string) $elem1 === (string) $elem2时两个单元被认为相同。 例如,字符串表达一样时,会使用首个元素。
参数
array
输入的数组。
sort_flags
第二个可选参数 sort_flags 可用于修改排序行为:
排序类型标记:
- SORT_REGULAR - 按照通常方法比较(不修改类型)
- SORT_NUMERIC - 按照数字形式比较
- SORT_STRING - 按照字符串形式比较
- SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。
返回值
返回过滤后的数组。
array_unshift
(PHP 4, PHP 5, PHP 7)
在数组开头插入一个或多个单元
说明
array_unshift ( array &$array [, mixed $... ] ) : int
array_unshift() 将传入的单元插入到 array 数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。
参数
array
输入的数组。
...
插入的变量。
返回值
返回 array 数组新的单元数目。
范例
Example 1 array_unshift() 例子
<?php
$queue = array("orange", "banana");
array_unshift($queue, "apple", "raspberry");
print_r($queue);
?>
以上例程会输出:
Array
(
[0] => apple
[1] => raspberry
[2] => orange
[3] => banana
)
array_values
(PHP 4, PHP 5, PHP 7)
返回数组中所有的值
说明
array_values ( array $array ) : array
array_values() 返回 input 数组中所有的值并给其建立数字索引。
参数
array
数组。
返回值
返回含所有值的索引数组。
范例
Example 1 array_values() 例子
<?php
$array = array("size" => "XL", "color" => "gold");
print_r(array_values($array));
?>
以上例程会输出:
Array
(
[0] => XL
[1] => gold
)
asort
(PHP 4, PHP 5, PHP 7)
对数组进行排序并保持索引关系
说明
asort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) : bool
本函数对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。
Note: 如果两个成员完全相同,那么它们在排序数组中的相对顺序是未定义的。
参数
array
输入的数组。
sort_flags
可以用可选的参数 sort_flags 改变排序的行为,详情见 sort()。
返回值
成功时返回 TRUE,或者在失败时返回 FALSE。
范例
Example 1 asort() 例子
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
?>
以上例程会输出:
c = apple
b = banana
d = lemon
a = orange
fruits 被按照字母顺序排序,并且单元的索引关系不变。
count
(PHP 4, PHP 5, PHP 7)
计算数组中的单元数目,或对象中的属性个数
说明
count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] ) : int
统计出数组里的所有元素的数量,或者对象里的东西。
参数
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。
current
(PHP 4, PHP 5, PHP 7)
返回数组中的当前单元
说明
current ( array &$array ) : mixed
每个数组中都有一个内部的指针指向它“当前的”单元,初始指向插入到数组中的第一个单元。
参数
array
这个数组。
返回值
current() 函数返回当前被内部指针指向的数组单元的值,并不移动指针。如果内部指针指向超出了单元列表的末端,current() 返回 FALSE。
Warning : 此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值。请阅读 布尔类型章节以获取更多信息。应使用 === 运算符来测试此函数的返回值。
范例
Example 1 使用 current() 系列函数的例子
<?php
$transport = array('foot', 'bike', 'car', 'plane');
$mode = current($transport); // $mode = 'foot';
$mode = next($transport); // $mode = 'bike';
$mode = current($transport); // $mode = 'bike';
$mode = prev($transport); // $mode = 'foot';
$mode = end($transport); // $mode = 'plane';
$mode = current($transport); // $mode = 'plane';
$arr = array();
var_dump(current($arr)); // bool(false)
$arr = array(array());
var_dump(current($arr)); // array(0) { }
?>
in_array
(PHP 4, PHP 5, PHP 7)
检查数组中是否存在某个值
说明
in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : bool
大海捞针,在大海(haystack)中搜索针(needle),如果没有设置 strict 则使用宽松的比较。
参数
needle
待搜索的值。
Note: 如果
needle是字符串,则比较是区分大小写的。
haystack
待搜索的数组。
strict
如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同。
返回值
如果找到 needle 则返回 TRUE,否则返回 FALSE。
范例
Example 1 in_array() 例子
<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
echo "Got Irix";
}
if (in_array("mac", $os)) {
echo "Got mac";
}
?>
第二个条件失败,因为 in_array() 是区分大小写的,所以以上程序显示为:
Got Irix
Example 2 in_array() 严格类型检查例子
<?php
$a = array('1.10', 12.4, 1.13);
if (in_array('12.4', $a, true)) {
echo "'12.4' found with strict check\n";
}
if (in_array(1.13, $a, true)) {
echo "1.13 found with strict check\n";
}
?>
以上例程会输出:
1.13 found with strict check
Example 3 in_array() 中用数组作为 needle
<?php
$a = array(array('p', 'h'), array('p', 'r'), 'o');
if (in_array(array('p', 'h'), $a)) {
echo "'ph' was found\n";
}
if (in_array(array('f', 'i'), $a)) {
echo "'fi' was found\n";
}
if (in_array('o', $a)) {
echo "'o' was found\n";
}
?>
以上例程会输出:
'ph' was found
'o' was found
array_key_exists
(PHP 4 >= 4.0.7, PHP 5, PHP 7)
检查数组里是否有指定的键名或索引
说明
array_key_exists ( mixed $key , array $array ) : bool
数组里有键 key 时,array_key_exists() 返回 TRUE。 key 可以是任何能作为数组索引的值。
参数
key
要检查的键。
array
一个数组,包含待检查的键。
返回值
成功时返回 TRUE, 或者在失败时返回 FALSE。
Note:
array_key_exists()仅仅搜索第一维的键。 多维数组里嵌套的键不会被搜索到。
范例
Example 1 array_key_exists() 例子
<?php
$search_array = array('first' => 1, 'second' => 4);
if (array_key_exists('first', $search_array)) {
echo "The 'first' element is in the array";
}
?>
Example 2 array_key_exists() 与 isset() 的对比
isset() 对于数组中为 NULL 的值不会返回 TRUE,而 array_key_exists() 会。
<?php
$search_array = array('first' => null, 'second' => 4);
// returns false
isset($search_array['first']);
// returns true
array_key_exists('first', $search_array);
?>
key
(PHP 4, PHP 5, PHP 7)
从关联数组中取得键名
说明
key ( array $array ) : mixed
key() 返回数组中当前单元的键名。
参数
array
该数组。
返回值
key() 函数返回数组中内部指针指向的当前单元的键名。 但它不会移动指针。如果内部指针超过了元素列表尾部,或者数组是空的,key() 会返回 NULL。
next
(PHP 4, PHP 5, PHP 7)
将数组中的内部指针向前移动一位
说明
next ( array &$array ) : mixed
next() 和 current() 的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位。这意味着它返回的是下一个数组单元的值并将数组指针向前移动了一位。
参数
array
受影响的 array 。
返回值
返回数组内部指针指向的下一个单元的值,或当没有更多单元时返回 FALSE。
Warning 此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值。请阅读 布尔类型章节以获取更多信息。应使用 === 运算符来测试此函数的返回值。
范例
Example 1 next() 及相关函数的用法示例
<?php
$transport = array('foot', 'bike', 'car', 'plane');
$mode = current($transport); // $mode = 'foot';
$mode = next($transport); // $mode = 'bike';
$mode = next($transport); // $mode = 'car';
$mode = prev($transport); // $mode = 'bike';
$mode = end($transport); // $mode = 'plane';
?>
sort
(PHP 4, PHP 5, PHP 7)
对数组排序
说明
sort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) : bool
本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。
Note: 如果两个成员完全相同,那么它们在排序数组中的相对顺序是未定义的。
参数
array
要排序的数组。
sort_flags
可选的第二个参数 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 位运算),不区分大小写排序字符串。
返回值
成功时返回 TRUE, 或者在失败时返回 FALSE。
范例
Example 1 sort() 例子
<?php
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
foreach ($fruits as $key => $val) {
echo "fruits[" . $key . "] = " . $val . "\n";
}
?>
以上例程会输出:
fruits[0] = apple
fruits[1] = banana
fruits[2] = lemon
fruits[3] = orange
fruits 被按照字母顺序排序。
Example 2 使用不区分大小写自然排序的 sort() 例子
<?php
$fruits = array(
"Orange1", "orange2", "Orange3", "orange20"
);
sort($fruits, SORT_NATURAL | SORT_FLAG_CASE);
foreach ($fruits as $key => $val) {
echo "fruits[" . $key . "] = " . $val . "\n";
}
?>
以上例程会输出:
fruits[0] = Orange1
fruits[1] = orange2
fruits[2] = Orange3
fruits[3] = orange20