数组内容操作:
数组搜索:
切分:
合并:
创建数组:
array_change_key_case($arr, $case=CASE_LOWER): 将数组键名修改为全大写或全小写, 返回是否成功
注意: 如果数组中多个键经过转换, 变成一样的, 如 key和kEY, 那么, 后面的值会覆盖掉前面的值
array_chunk($arr, $size, $preserve_keys=false): 将数组切分为指定长度的n个数组, 返回切割后的数组列表
array_column($arr, $key, $index_key=null): 将数组中键为key的所对应的值提取出来, 返回提取后的数组
$arr = [
[
'id' => '王二id',
'name' => '王二',
],
[
'id' => '李四id',
'name' => '李四',
],
];
$a = array_column($arr, 'name');
/*
Array
(
[0] => 王二
[1] => 李四
)
*/
$a = array_column($arr, 'name', 'id');
/* 将id作为结果的索引
Array
(
[王二id] => 王二
[李四id] => 李四
)
*/
// 如果数组内容是对象怎么办?
class User{
public $username;
public function __construct(string $username)
{
$this->username = $username;
}
}
$arr = [
new User('王二'),
new User('李四'),
];
$a = array_column($arr, 'username');
/* 也就是说, 可以直接拿到对象的public属性
Array
(
[0] => 王二
[1] => 李四
)
*/
class User2{
private $username;
public function __construct(string $username)
{
$this->username = $username;
}
public function __get($prop)
{
return $this->$prop;
}
public function __isset($prop) : bool
{
return isset($this->$prop);
}
}
$arr = [
new User('王二'),
new User('李四'),
];
$a = array_column($arr, 'username');
/* 私有属性需要通过 __get 魔术方法获取
若不提供 __isset 方法会返回空数组, 因为会先通过该方法判断是否存在
Array
(
[0] => 王二
[1] => 李四
)
*/
array_combine($keys, $values): 将两数组合并, 使用keys数组作为新数组的键, 使用values数组作为新数组的值, 返回合并后的数组, 若两数组元素个数不同, 返回false
array_merge($arr, [$arr, ...]): 将多个数组合并为一个数组, 返回合并后的数组
若存在键冲突, 后面的数组内容会覆盖前面的内容, 但如果键为数字, 会进行重新排序从0开始, 后面的向后排.
如果像在键冲突时, 忽略后面键的内容, 请使用 + 连接两数组
array_merge_recursive($arr, [$arr, ...]): 将多个数组合并为一个数组, 返回合并后的数组
此函数与 array_merge 的不同, 在于对相同键时的处理不同
此函数会将相同键的内容合并为数组, 一直递归合并下去
array_replace($arr, [$arr, ...]): 将多个数组合并, 返回合并后的数组
此函数于 array_merge 的不同, 在于对数字索引的处理, 此函数不会重排, 而是直接使用后面的内容替换
array_replace_recursive($arr, [$arr, ...]): 将多个数组合并, 返回合并后的数组
此函数 与array_replace 的不同, 在于此函数会递归比较, 将数组中的数组都进行比较
array_walk($arr, $callback, $userdata=null): 对数组中的每个元素通过callback进行处理
$arr = [
1 => 4,
3 => 2,
];
$a = array_walk($arr, function (&$value, $key){
$value += $key;
});
/* 每次将键值相加, 赋给值
Array
(
[1] => 5
[3] => 5
)
*/
array_walk_recursive($arr, $callback, $userdata=null): 对数组中的每个元素通过函数进行处理
与 array_walk 不同的, 此函数会递归数组中的每个数组
array_values($arr): 将数组的所有值, 作为新的数组返回
array_keys($arr): 将数组的所有键,作为新的数组返回
array_count_values($arr): 统计数组中值的次数, 返回统计数组(键为原数组值, 值为次数)
$arr = [
'1', '你好', '1', '我们',
];
$a = array_count_values($arr);
/*
Array
(
[1] => 2
[你好] => 1
[我们] => 1
)
*/
array_diff_assoc($arr, $arr2, [$arr3, ...]): 返回新数组(键值对在arr数组,不在其他数组)
array_diff_uassoc($arr, $arr2, [$arr3, ...], $fun): 返回新数组(键值对在arr数组,不在其他数组, 使用自定义函数进行比较)
array_diff_key($arr, $arr2, [$arr3, ...]): 返回新数组(键在arr数组, 不再其他数组)
array_diff_ukey($arr, $arr2, [$arr3, ...], $fun): 返回新数组(键在arr数组, 不再其他数组, 使用用户函数进行比较)
array_diff($arr, $arr2, [$arr3, ...]): 返回新数组(值在arr数组, 不再其他数组)
array_fill_keys($arr, $arr2): 将arr的值作为新数组的key, arr2的值作为新数组的value, 返回新数组
与 array_combine 不同, 此函数不会比较两数组长度
array_fill($index, $num, $value): 返回索引以index开始, 长度为num, 值为value的数组
array_filter($arr, $callback, $flag=0): 将数组中所有键通过callback进行过滤, 返回过滤后的数组
array_flip($arr): 将数组中键值反转
若反转后同一个键有多个值, 使用最后一个值
array_key_exists($key, $arr): 指定的键在数组中是否存在
array_key_first($arr): 返回数组第一个键
array_key_last($arr): 返回数组最后一个键
array_map($callback, $arr1, [$arr2, ...]): 对数组的值经过函数处理后, 作为新的值
array_pop($arr): 弹出数组最后一个元素(出栈)
array_push($arr, $value1, [$value2, ...]): 将值压入数组末尾(入栈)
array_intersect_assoc($arr, $arr2, [$arr3, ...]): 返回多个数组键值对均相同的
array_intersect_uassoc($arr, $arr2, [$arr3, ...], $fun): 返回多个数组中键值均相同的, 通过用户函数比较
array_intersect_key($arr, $arr2, [$arr3, ...]): 返回键存在在arr中, 并同时在其他数组中也存在的
array_intersect_ukey($arr, $arr2, [$arr3, ...], $fun): 返回键存在于arr中, 并同时存在于其他数组中的, 通过用户函数比较
array_intersect($arr, $arr2, [$arr3, ...]): 返回值在arr中, 同时在其他数组存在的
in_array($value, $arr, $flag=false): 判断值是否在数组中
end($arr): 返回数组最后一个元素的值
array($arr): 创建一个数组, 参数为数组信息
array_pad($arr, $size, $value): 将数组扩充到指定大小, 使用value填充
array_rand($arr, $num=1): 从数组中随机取出num个元素的键
array_reduce($arr, $callback, $i=null): 递归数组所有的值, 通过函数计算, 返回最终值
array_reverse($arr, $flag=false): 将数组倒序并返回
array_search($value, $arr, $flag=false): 在数组中查找指定值是否存在, 若存在, 返回键名
array_shift($arr): 将数组的第一个元素弹出(队列)
array_slice($arr, $offset, $length=null, $flag=false): 切下数组指定的一段
array_splice($arr, $offset, $lenght=count($arr), $rarr=array()): 去掉数组的指定部分, 使用新的数组取代
array_udiff_uassoc($arr, $arr2, [$arr3, ...], $fun): 键值在arr中, 同时不在其他数组中的, 用户函数比较
array_udiff_assoc($arr, $arr2, [$arr3, ...], $fun): 键值在arr中, 同时不在其他数组中的, 用户函数比较
array_unique($arr, $flag=SORT_STRING): 去掉数组中重复的值(将值进行排序, 然后相同的值取第一个)
array_unshift($arr, [$value1, ...]): 将值插入到数组的开头
asort($arr, $flag=SORT_REGULAR): 数组排序, 保持键值关系
arsort($arr, $flag=SORT_REGULAR): 数组逆向排序, 保持键值关系
sort($arr, $flag=SORT_REGULAR): 数组排序
usort($arr, $fun): 对数组中的值进行排序, 使用用户函数, 会重排索引
compact($v1, [$v2, ...]): 将传入的参数作为变量名, 键为变量名, 值为变量, 返回新数组
$v1 = "abc";
$v2 = "bcd";
$v3 = 'efg";
$arr = array('v2', 'v3');
$a = compact('v1', 'nothing', $arr);
/*
Array(
[v1] => 'abc',
[v2] => 'bcd',
[v3] => 'efg',
)
*/
range($start, $end, $step=1): 创建从start开始, 到end结束, 步长为step的数组
list($a, $b, ...): 将数组中的值赋给变量, 可以在单次操作为一组变量赋值
$arr = [
'你好', '我们',
];
// $a='你好', $b='我们'
list($a, $b) = $arr;
extract($arr, $flag=EXTR_OVERWRITE, $frefix=null): 将数组中的键值对导出为变量
array_multisort($arr, $order=SORT_ASC, $flag=SORT_REGULAR, ...): 对多个数组或多维数组进行排序