PHP 中的数组函数

array_change_key_case

array_change_key_case(array $array, int $case = CASE_LOWER): array

功能描述: 返回键名全是小写或者大写的数组。
默认为小写,第二个参数有两个可选的常量:CASE_UPPER 和 CASE_LOWER。

array_chunk

array_chunk(array $array, int $length, bool $preserve_keys = false): array

功能描述: 将数组按照固定的大小分割成多个子数组。子数组的元素个数由 $length 决定。最后一个子数组的元素个数可能会小于 $length。

$arr= ['a', 'b', 'c', 'd', 'e'];
$newArr = array_chunk($arr, 2);
var_export($newArr);

输出结果:

array (
  0 =>
  array (
    0 => 'a',
    1 => 'b',
  ),
  1 =>
  array (
    0 => 'c',
    1 => 'd',
  ),
  2 =>
  array (
    0 => 'e',
  ),
)

array_column

array_column(array $array, int|string|null $column_key, int|string|null $index_key = null): array

功能描述: 可用来返回二维数组中指定的某一列或所有列。(返回所有列时,第二个参数为 null,配合第三个参数来重新设置数组的键,非常管用)。

<?php 
$records = array(
    array('id' => 2135, 'name' => 'John'),
    array('id' => 3245, 'name' => 'Smith'),
    array('id' => 5342, 'name' => 'Peter')
);

// 从结果集中取出 name 列
$names = array_column($records, 'name');
print_r($names);

// 从结果集中取出 name 列,并用相应的 id 作为键
$names = array_column($records, 'name', 'id');
print_r($names);

// 从结果集中取出所有列,并用相应的 id 作为键
$names = array_column($records, null, 'id');
print_r($names);

array_combine

array_combine(array $keys, array $values): array

功能描述:
用来自 keys 数组的值作为键名,来自 values 数组的值作为相应的值,返回数组。
如果两个数组的单元数不同或者数组为空时返回 false。

$arr = array_combine(array('id', 'name'), array('1', 'jack'));
var_dump($arr);

array_count_values

array_count_values(array $array): array

功能描述: 统计数组中每个 value 值出现的次数,返回这个统计结果。

array_diff

array_diff(array $array, array ...$arrays): array

功能描述:
按照 value 值比较计算多个数组的差集,返回差集数组。
该数组包含了所有在第一个数组中但不在其它数组中的值。键名保持不变。

array_diff_key

array_diff_key(array $array, array ...$arrays): array

功能描述:
按照 key 键比较计算多个数组的差集,返回差集数组。
除了比较是根据键名而不是值来进行的之外,本函数和 array_diff() 相同。

array_diff_assoc

array_diff_assoc(array $array, array ...$arrays): array

功能描述: 按照 value 值和 key 键比较计算多个数组的差集,返回差集数组。value 值和 key 只要有一个不同,就是差集。

array_fill

array_fill(int $start_index, int $count, mixed $value): array

功能描述: 用 value 参数的值填充 count 个元素到数组,开始键名由 start_index 参数指定。返回填充后的数组。

$dp = array_fill(0, 2, array_fill(0, 3, 0));
print_r($dp);

array_fill_keys

array_fill_keys(array $keys, mixed $value): array

功能描述: 使用指定的键和值填充数组。返回填充后的数组。

array_fill_keys(range(0, 2), 0);

array_filter

array_filter(array $array, ?callable $callback = null, int $mode = 0): array

功能描述:
依次将数组中的每个值传递到 callback 回调函数。如果 callback 函数返回 true,就把数组的当前元素包含在返回的结果数组中;否则,过滤掉当前元素。数组的键名保留不变。返回处理后的新数组。

如果没有提供 callback 函数,就过滤掉数组中所有值为 false 的元素。

可使用 array_values() 对数组重新索引。

array_flip

array_flip(array $array): array

功能描述:
交换数组中的键和值,返回交换后的数组。

array_intersect

array_intersect(array $array, array ...$arrays): array

功能描述:
按照 value 值比较计算多个数组的交集,返回交集数组。
该数组包含了所有在第一个数组中同时也在其它数组中的值。键名保持不变。

array_keys

array_keys(array $array[, mixed $filter_value, bool $strict = false]): array

功能描述:
将数组中的所有键名以数组的形式返回。
如果指定了可选参数 $filter_value,则只返回匹配该值的键名。

array_key_exists

array_key_exists(string|int $key, array $array): bool

功能描述:
判断给定的键名是否存在于数组的 keys 中,返回布尔值。

key_exists() 是 array_key_exists() 的别名。

array_map

array_map(?callable $callback, array $array, array ...$arrays): array

功能描述:
用回调函数映射处理数组中的每一个元素 value,返回处理后的新数组。

$a = [1, 2, 3];
$b = array_map(function ($v) {
    return $v ? $v * $v : 0;
}, $a);
print_r($b);

array_merge

array_merge(array ...$arrays): array

功能描述: 合并一个或多个数组,后一个数组中的值附加在前一个数组的后面,返回合并后的数组。
如果数组中有相同的字符串键名,后面的值将覆盖前面的值。

$arr = array_merge( array('a', 'b') , array('b', 'c'));
var_dump($arr);

array_merge_recursive

array_merge_recursive(array ...$arrays): array

功能描述: 递归合并一个或多个数组,后一个数组中的值附加在前一个数组的后面,返回合并后的数组。
如果数组的 value 值本身是一个数组,value 数组中若有相同的字符串键名,会按照对应的字符串条目合并为子数组;如有相同的数值键名,会附加到后面。

array_push

array_push(array &$array, mixed $value1, mixed $... = ?): int

功能描述:
将一个或多个元素压入数组的尾部(入栈),返回新数组的长度。

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

array_pop

array_pop(array &$array): mixed

功能描述:
将数组的最后一个元素弹出并作为结果返回。数组长度减一。

注意:它会重置(reset)数组指针。

配合 array_push() 可模拟栈的后进先出特性。

array_shift

array_shift(array &$array): mixed

功能描述: 将数组的第一个元素移出并作为结果返回。数组长度减一并将所有其它单元向前移动一位。所有的数值键名改为从零开始计数,字符串键名不变。

注意:它会重置(reset)数组指针。

配合 array_push() 可模拟队列的先进先出特性。

array_unshift

array_unshift(array &$array, mixed ...$values): int

功能描述:
将一个或多个元素插入数组的开头,返回新数组的长度。

单元是作为整体被插入的,因此单元将保持同样的顺序。所有的数值键名改为从零开始计数,字符串键名不变。

注意:它会重置(reset)数组指针。

array_rand

array_rand(array $array, int $num = 1): int|string|array

功能描述:
随机从数组中取出一个或多个元素的键名返回。
$num 如果大于 1,则返回包含多个键名的数组,默认值为 1。

array_reduce

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

功能描述: 用回调函数将数组迭代处理为单一的值,当数组的所有 value 值都被迭代处理完之后,返回迭代的结果。

array_replace

array_replace(array $array, array ...$replacements): array

功能描述: 使用传递的数组按照 key 键替换第一个数组中的元素。返回替换后的新数组。

如果后面的数组 $replacements 的键名和第一个数组 $array 的键名相同,就进行替换;如果 $replacements 的键名,不存在于第一个数组 $array 中,就在 $array 中附加这个元素;如果键名仅存在于第一个数组 $array 中,就保留不变。

array_reverse

array_reverse(array $array, bool $preserve_keys = false): array

功能描述: 返回元素顺序相反的数组。

array_search

array_search(mixed $needle, array $haystack, bool $strict = false): int|string|false

功能描述:
在数组中搜索指定的 value 值,成功则返回相应的键名(返回第一次匹配的键),失败返回 false。
如果 $needle 是字符串,会区分大小写。

array_slice

array_slice(
    array $array,
    int $offset,
    ?int $length = null,
    bool $preserve_keys = false
): array

功能描述:
从数组中截取一部分元素作为新的数组返回。
$offset 表示起始位置(包括该位置的元素)。
$length 为正时,表示截取的长度;为负时,表示结束位置,但不包括结束位置的元素

array_splice

array_splice(
    array &$array,
    int $offset,
    ?int $length = null,
    mixed $replacement = []
): array

功能描述:
从数组中去掉一部分元素,返回被移除的数组单元。
如果给了第四个参数,就将 $replacement 从 $offset 位置处插入到 $array 中。

array_sum

array_sum(array $array): int|float

功能描述:
计算数组中所有值的和,并将其以整数或浮点数的形式返回。

array_unique

array_unique(array $array, int $flags = SORT_STRING): array

功能描述: 返回没有重复值的新数组。键名不变。

array_values

array_values(array $array): array

功能描述:
返回数组中所有的值,并给其重新建立数字索引

array_walk

array_walk(array|object &$array, callable $callback, mixed $arg = null): bool

功能描述:
使用用户自定义函数对数组中的每个元素做回调处理。返回布尔值。

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

参数说明:

  • 第一个参数 $array :表示输入的数组。
  • 第二个参数 $callback :是一个回调函数,它接受两个参数(最多三个)。数组元素的 value 值作为第一个,key 键作为第二个。如果回调函数需要直接作用于数组中的值,则将回调函数的第一个参数指定为引用。这样任何对数组元素 value 值的改变也将改变原始数组本身(原始数组的键名 key 不会被改变)。
  • 第三个参数:如果提供了可选参数 $arg,将被作为第三个参数传递给 callback 回调函数。

注意:只有数组的 value 值才可以被改变,不应在回调函数中改变该数组本身的结构(如新增、删除元素等)。

$a = [4, 5];
$arg = 10;
$b = [];
array_walk($a, function (&$v, $k, $third) use (&$b) {
    $v = $v * $third;
    $k = $k + $third;
    $b[$k] = $v;
}, $arg);

print_r($a);
print_r($b);

输出结果:

Array         
(             
    [0] => 40 
    [1] => 50 
)             
Array         
(             
    [10] => 40
    [11] => 50
)  

array_walk_recursive

array_walk_recursive(array|object &$array, callable $callback, mixed $arg = null): bool

功能描述:
使用用户自定义函数对数组中的每个元素递归做回调处理。返回布尔值。

参数说明同 array_walk。

注意:如果数组中某个元素的值也是一个数组,该元素本身不会被回调函数处理,而是递归到它的内部进行处理。

sort

sort(array &$array, int $flags = SORT_REGULAR): bool

功能描述:
将数组中的元素按照值升序排序,同时删除原有的键名,并启用数字索引。返回布尔值。

asort

asort(array &$array, int $flags = SORT_REGULAR): bool

功能描述:
将数组中的元素按照值升序排序,同时保留键名。返回布尔值。

rsort

rsort(array &$array, int $flags = SORT_REGULAR): bool

功能描述:
将数组中的元素按照值降序排序,同时删除原有的键名,并启用数字索引。返回布尔值。

arsort

arsort(array &$array, int $flags = SORT_REGULAR): bool

功能描述:
将数组中的元素按照值降序排序,同时保留键名。返回布尔值。

ksort

ksort(array &$array, int $flags = SORT_REGULAR): bool

功能描述:
将数组按照键名 key 升序排序,同时保留键名。返回布尔值。

krsort

krsort(array &$array, int $flags = SORT_REGULAR): bool

功能描述:
将数组按照键名 key 降序排序,同时保留键名。返回布尔值。

natsort

natsort(array &$array): bool

功能描述:
将数组按照值采用自然排序升序排序,同时保留键名,返回布尔值。

自然排序是指和人们通常对字母数字字符串进行排序的方法一样的排序算法。它和 sort() 采用的计算机排序算法有些区别。

$array1 = $array2 = ['img10.png', 'img1.png', 'img2.png'];
sort($array1);
print_r($array1);
natsort($array2);
print_r($array2);

输出结果:

Array
(
    [0] => img1.png
    [1] => img10.png
    [2] => img2.png
)
Array
(
    [1] => img1.png
    [2] => img2.png
    [0] => img10.png
)

natcasesort

natcasesort(array &$array): bool

功能描述: 将数组按照值采用不区分大小写的自然排序升序排序,同时保留键名,返回布尔值。

usort

usort(array &$array, callable $callback): bool

功能描述: 使用用户自定义的比较函数对数组中的元素按照值进行排序(会自动删除原来的键名)。

如果数组需要用一种不寻常的标准进行排序,就使用此函数。

回调函数在第一个参数小于,等于或大于第二个参数时,需相应地返回小于,等于或大于 0 的整数。

$arr = ['a1' => 10, 'a2' => 5, 'a3' => 100];
usort($arr, function ($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return $a > $b ? 1 : -1;
});
print_r($arr);

输出结果:

Array
(
    [0] => 5
    [1] => 10
    [2] => 100
)

上述写法是按照值升序排序,如果把 1 和 -1 的位置调换,就是降序排序。

uasort

uasort(array &$array, callable $callback): bool

功能描述: 使用用户自定义的比较函数对数组中的元素按照值进行排序,保留键名。

uksort

uksort(array &$array, callable $callback): bool

功能描述: 使用用户自定义的比较函数对数组中的元素按照键名进行排序。(键名保持不变)

compact

compact(array|string $var_name, array|string ...$var_names): array

功能描述:
变量名成为键名,变量的值成为该键对应的值,返回将所有变量添加进去后的数组。
和 extract()的作用正好相反。

$id = 1;
$name = 'jack';
$arr = compact ( 'id', 'name');
var_dump($arr);

count

count(Countable|array $value, int $mode = COUNT_NORMAL): int

功能描述:
统计数组中元素的数量(数组的长度),返回该数量。
如果是多维数组,可以指定第二个参数为 COUNT_RECURSIVE 或 1,则会对多维数组进行递归计算。

sizeof() 是 count() 函数的别名。

current

current(array|object $array): mixed

功能描述:
返回数组的内部指针当前指向的元素的值。

pos() 是 current() 函数的别名。

key

key(array|object $array): int|string|null

功能描述:
返回数组的内部指针当前指向的元素的键名。

prev

prev(array|object &$array): mixed

功能描述:
将数组的内部指针,向前移动一位,返回移动后指针指向的元素的值。

next

next(array|object &$array): mixed

功能描述:
将数组的内部指针,向后移动一位,返回移动后指针指向的元素的值。

reset

reset(array|object &$array): mixed

功能描述:
将数组的内部指针重置(即回到初始位置,指向第一个元素),并返回第一个元素的值。

extract

extract(array &$array, int $flags = EXTR_OVERWRITE, string $prefix = ""): int

功能描述:
从数组中将变量导入到当前的符号表,键名当作变量名,值作为变量的值。
每个键值对都会在当前的符号表中建立变量,受extract_type和prefix参数的影响。

警告: 不要对不可信的数据使用 extract(),比如用户输入( G E T 、 _GET、 GET_FILES)。

implode

implode(string $separator, array $array): string

功能描述: 用指定的分隔符连接数组中的元素,并返回该字符串。
implode() 函数的别名为 join() 函数。

list

list(mixed $var, mixed ...$vars = ?): array

功能描述:
用数组中的值给一组变量赋值。和 array() 一样,它不是真正的函数,而是语言结构。

注意:在 PHP 7.1.0 之前的版本,list() 仅能用于数字索引的数组,并假定数字索引从 0 开始。

list($a, $b) = ['100', '200'];
echo $a.'-'.$b;   // 100-200

in_array

in_array(mixed $needle, array $haystack, bool $strict = false): bool

功能描述:
判断给定的值是否存在于数组中,返回布尔值。

range

range(string|int|float $start, string|int|float $end, int|float $step = 1): array

功能描述: 返回包含指定范围内的元素的数组。 s t a r t 表示第一个元素, start 表示第一个元素, start表示第一个元素,end 表示最后一个元素,可选参数 $step 表示步长,默认为 1。如果 $end 大于 $start,返回的是降序数组。

$arr = range ( 'a' , 'f' );

shuffle

shuffle(array &$array)

功能描述:
将数组中元素的顺序打乱,同时会删除原有的键名,并启用数字索引。返回布尔值。

each

each(array|object &$array): array

功能描述:
将数组中当前指针指向的的键值对形成一个包含四个元素的新数组,返回该新数组,并将指针向后移动一位。

键值对被返回为包含四个单元的新数组,新数组的键名为 0,1,key 和 value。
0 和 key 对应的值为键值对的键,1 和 value 对应键值对的值。

注意:该函数已自 PHP 7.2.0 起被废弃,并自 PHP 8.0.0 起被移除。 强烈建议不要依赖该函数

array_multisort

功能描述: 常用于二维数组的排序。

$data = [
    ['sku_id' => 1001, 'price' => 5.0, 'stock_num' => 200],
    ['sku_id' => 1002, 'price' => 7.0, 'stock_num' => 100],
    ['sku_id' => 1003, 'price' => 3.0, 'stock_num' => 100],
];

// 将二维数组 $data 按照 stock_num 升序、price 升序排列
array_multisort(
    array_column($data, 'stock_num'),
    SORT_ASC,
    array_column($data, 'price'),
    SORT_ASC,
    $data
);
var_dump($data);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值