常用数组函数
1. 键名相关
array_keys
:获取所有键名并组成新数组
例
<?php
// array_keys,获取所有键名组成的数组
$arr = ['id'=>100,'name'=>'张三','email'=>'zhangsan@admin.cn'];
// 返回值为键组成的数组
print_r(array_keys($arr));
图array_key_exists
:检查指定键名是否存在,返回值为布尔值
例
<?php
$arr = ['id'=>100,'name'=>'张三','email'=>'zhangsan@admin.cn'];
// array_key_exists,检查指定键名是否存在,返回值为布尔值
var_dump(array_key_exists('email',$arr));
图array_key_last
:返回最后一个键名,返回值为字符串
例
<?php
$arr = ['id'=>100,'name'=>'张三','email'=>'zhangsan@admin.cn'];
// array_key_last,返回最后一个键名,返回值为字符串
echo array_key_last($arr).'<hr>';
图array_key_first
:返回第一个键名,返回值为字符串
例
<?php
$arr = ['id'=>100,'name'=>'张三','email'=>'zhangsan@admin.cn'];
// array_key_first,返回第一个键名,返回值为字符串
echo array_key_first($arr);
图
2. 与值相关
array_values
: 取出数组中的值,并以索引数组方式重新排序,位置不变,只改变键名
例
<?php
// array_values,取出数组中的值,并以索引数组方式重新排序,位置不变,只改变键名
$arr = ['id'=>5,'num'=>10,20,30,30,20,10,5];
print_r($arr);
// 返回值为索引数组重新排列的新数组
print_r(array_values($arr));
图in_array
:检查数组中是否存在某个值,返回值为布尔值
例
<?php
$arr = ['id'=>5,'num'=>10,20,30,30,20,10,5];
var_dump(in_array(10,$arr));
图array_search
:搜索指定的值,返回值所对应的键名
例
<?php
// array_search,搜索指定的值,返回值所对应的键名
$arr1 = ['id'=>100,'name'=>'张三','email'=>'zhangsan@admin.cn'];
// 返回值为字符串
echo array_search('张三',$arr1);
图array_unique
: 删除重复的值,返回值为删除重复值后的新数组
例
<?php
// array_unique,删除数组中重复出现的值
$arr2 = [5,10,20,30,30,20,10,5,1];
print_r($arr2);
// 返回值为删除重复值后的新数组
print_r(array_unique($arr2));
图
3. 与统计相关
count
: 统计元素数量或对象属性数量
例
<?php
$arr1 = [
['name','id','email'],
['BMW','AUDI','VOLVO']
];
echo '常规计数'. count($arr1).'<hr>';
// 在后面加一个参数'1',就可以查询多维数组下面的所有元素个数
echo '所有数组的元素个数'.count($arr1,1).'<hr>';
图array_count_values
: 统计所有值的出现频率
例
<?php
$arr = [5,10,20,30,30,20,10,5,1];
// array_count_values,统计元素出现的次数(频率)
echo '<pre>'. print_r($arr,true) .'</pre>';
echo '<hr>';
echo '返回一个新数组,键为原数组的值,值为它出现的次数';
echo '<pre>'. print_r(array_count_values($arr),true) . '</pre>';
图
4. 与计算相关
array_sum
对数组中所有值求和
例
<?php
$arr = [5,10,20,30,30,20,10,5,1];
// 里面有字符串也能相加,但是只相加数字型字符串,(遇到其他类型字符串就越过)
// 返回值为数值型
echo '数值型';
var_dump(array_sum($arr));
echo '<hr>';
$arr1 = ['5a',10,20,30,30,20,10,5,1];
echo '里面有字符串';
var_dump(array_sum($arr1));
$arr2 = ['a5',10,20,30,30,20,10,5,1];
echo '<hr>';
echo '字符串第一个值不是数字';
var_dump(array_sum($arr2));
echo '<hr>';
图array_product
: 计算数组中所有值的乘积
<?php
$arr3 = [5,6];
echo '数组元素乘积';
var_dump(array_product($arr3));
echo '<hr>';
$arr4 = ['5',6];
echo '数组元素乘积,里面有字符串';
var_dump(array_product($arr4));
echo '<hr>';
$arr4 = ['a5',6];
echo '数组元素乘积,字符串第一个值不是数字';
var_dump(array_product($arr4));
5. 栈与队列
array_push
: 从尾部添加一个或多个元素,返回值为当前元素个数,并不是添加了多少个元素
例
<?php
$arr = [];
// 返回值为当前元素个数,并不是添加了多少个元素
echo '当前元素:'.array_push($arr,'杨过').'<hr>';
echo '当前元素:'.array_push($arr,'小龙女').'<hr>';
echo '当前元素:'.array_push($arr,'郭襄','张三丰').'<hr>';
print_r($arr);
图array_pop
: 从尾部删除最后一个元素
例
<?php
// `array_pop`: 从尾部删除最后一个元素
$arr = ['杨过','小龙女','郭襄','张三丰'];
// 返回值为删除的元素
echo array_pop($arr).'<hr>';
print_r($arr);
图array_unshift
: 从头部添加一个或多个元素
例
<?php
// `array_unshift`: 从头部添加一个或多个元素
$arr = ['杨过','小龙女','郭襄','张三丰'];
// 返回值为当前元素个数,并不是添加了多少个元素
echo array_unshift($arr,'杨康').'<hr>';
// 添加方式(可以理解为书写方式)从右边开始向左边书写
echo array_unshift($arr,'尹志平').'<hr>';
print_r($arr);
图array_shift
: 从头部删除一个元素
例
<?php
// `array_shift`: 从头部删除一个元素
$arr = ['杨过','小龙女','郭襄','张三丰'];
// 返回值为删除的元素
echo array_shift($arr).'<hr>';
print_r($arr);
echo '<hr>';
图
6. 排序
sort
: 按值升序排序, 索引重排
例
<?php
// `sort`: 按值升序排序, 索引重排
$arr = [7,8,6,10,11,1,3,5,20];
echo '原数组';
echo '<pre>'.print_r($arr,true).'</pre>';
sort($arr);
echo '重新排序后';
echo '<pre>'.print_r($arr,true).'</pre>';
图asort
: 按值升序排序, 索引保持不变
例
<?php
$arr = [7,8,6,10,11,1,3,5,20];
echo '原数组';
echo '<pre>'.print_r($arr,true).'</pre>';
echo '重新排序索引不变';
asort($arr);
echo '<pre>'.print_r($arr,true).'</pre>';
图rsort
: 按值降序排序, 索引重排
例
<?php
$arr = [7,8,6,10,11,1,3,5,20];
echo '原数组';
echo '<pre>'.print_r($arr,true).'</pre>';
rsort($arr);
echo '按值降序排列';
echo '<pre>'.print_r($arr,true).'</pre>';
图arsort
: 按值降序排序, 索引保持不变
例
<?php
$arr = [7,8,6,10,11,1,3,5,20];
echo '原数组';
echo '<pre>'.print_r($arr,true).'</pre>';
arsort($arr);
echo '按值降序排列,索引保持不变';
echo '<pre>'.print_r($arr,true).'</pre>';
图ksort
: 按键名升序排序
例
<?php
// `ksort`: 按键名升序排序,以ascall码做对比
$arr = ['a'=>7,'bd'=>8,'bc'=>6,10,11,1,3,5,20];
echo '原数组';
echo '<pre>'.print_r($arr,true).'</pre>';
ksort($arr);
echo '<pre>'.print_r($arr,true).'</pre>';
图krsort
: 按键名降序排序
例
<?php
$arr = ['a'=>7,'bd'=>8,'bc'=>6,10,11,1,3,5,20];
echo '原数组';
echo '<pre>'.print_r($arr,true).'</pre>';
// krsort`: 按键名降序排序
krsort($arr);
echo '<pre>'.print_r($arr,true).'</pre>';
图
natsort
: 支持数字型字符串排序
例
<?php
$arr = ['img1.jpg', 'img5.jpg', 'img10.jpg', 'img8.jpg'];
echo '普通的以值排序';
sort($arr);
echo '<pre>'.print_r($arr,true).'</pre>';
echo '自然排序';
$arr1 = ['img1.jpg', 'img5.jpg', 'img10.jpg', 'img8.jpg'];
natsort($arr1);
echo '<pre>'.print_r($arr1,true).'</pre>';
图shuffle
: 随机打乱一个数组的顺序
例
<?php
$arr = ['img1.jpg', 'img5.jpg', 'img10.jpg', 'img8.jpg'];
sort($arr);
echo '<pre>'.print_r($arr,true).'</pre>';
shuffle($arr);
echo '<pre>'.print_r($arr,true).'</pre>';
图:每次执行都会改变array_flip
: 交换数组中的键和值,返回值为一个新数组
例
<?php
$arr = ['img1.jpg', 'img5.jpg', 'img10.jpg', 'img8.jpg'];
echo '<pre>'.print_r($arr,true).'</pre>';
// `array_flip`: 交换数组中的键和值,返回值为一个新数组
$arr1 = array_flip($arr);
echo '<pre>'.print_r($arr1,true).'</pre>';
图array_reverse
: 反转一个数组,返回值为一个新数组
例
<?php
$arr = ['img1.jpg', 'img5.jpg', 'img10.jpg', 'img8.jpg'];
echo '<pre>'.print_r($arr,true).'</pre>';
// `array_reverse`: 反转一个数组,返回值为一个新数组
$arr1 = array_reverse($arr);
echo '<pre>'.print_r($arr1,true).'</pre>';
图
7. 查询与替换
array_slice
: 从数组中取出一部分
例
<?php
// `array_slice`: 从数组中取出一部分
$arr = ['杨过','小龙女','郭襄','尹志平','杨康'];
//返回值为取出的元素组成的新数组
//参数为数组,从某个位置开始,从开始位置起取几个元素
//从下标2开始,取完
$arr1 = array_slice($arr,2);
echo '从下标2开始,取完';
echo '<pre>'.print_r($arr1,true).'</pre>';
//从下标2开始,取2个
$arr2 = array_slice($arr,2,2);
echo '从下标2开始,取2个';
echo '<pre>'.print_r($arr2,true).'</pre>';
echo '原始数组不会改变';
echo '<pre>'.print_r($arr,true).'</pre>';
图array_splice
: 去掉数组中一部分并用其它值代替
例
<?php
$arr = ['杨过','小龙女','郭襄','尹志平','杨康'];
echo '<pre>'.print_r($arr,true).'</pre>';
// `array_splice`: 去掉数组中一部分并用其它值代替,返回值为去掉的元素组成的数组
//参数1为数组,参数2从某个位置开始,参数3从开始位置起取几个元素(不写默认到最后),参数4替换的元素(不写就是删除不替换)替换两个元素用数组,单个元素就用字符串
array_splice($arr,3,2,['丘处机','金轮法王']);
echo '<pre>'.print_r($arr,true).'</pre>';
图array_rand
: 从数组中随机取出一个或多个元素的键名
例
<?php
$arr = ['杨过','小龙女','郭襄','尹志平','杨康'];
echo '<pre>'.print_r($arr,true).'</pre>';
// `array_rand`: 从数组中随机取出一个或多个元素的键名
// 参数1为需要取键的数组,参数2为取多少个(默认为1)
// 返回值为键组成的新的数组
// 如果取1个,返回值为字符串
$res = array_rand($arr,3);
echo '<pre>'.print_r($res,true).'</pre>';
图array_column
: 获取多维数组中一列组成的新数组
例
<?php
// `array_column`: 获取多维数组中一列组成的新数组
$arr1 = [
['id'=>101,'name'=>'杨过','email'=>'yangguo@admin.cn'],
['id'=>102,'name'=>'小龙女','email'=>'小龙女@admin.cn'],
['id'=>103,'name'=>'尹志平','email'=>'尹志平@admin.cn'],
];
//参数1提取的原数组,参数2提取的字段,参数3参考字段(可以不写)
$result = array_column($arr1,'name');
echo '<pre>'.print_r($result,true).'</pre><br>';
$result = array_column($arr1,'name','id');
echo '<pre>'.print_r($result,true).'</pre><br>';
图array_replace
使用后面数组的值替换第一个数组的值
例
<?php
// `array_replace` 使用后面数组的值替换第一个数组的值
$arr = ['id'=>10,'name'=>'杨过','email'=>'yangguo@admin.cn'];
echo '<pre>'.print_r($arr,true).'</pre><br>';
$arr1 = ['name'=>'小龙女','email'=>'xiaolongnv@admin.cn'];
// 返回值为替换后的新数组
// 参数1为源数组,参数2为替换数组
$result = array_replace($arr,$arr1);
echo '替换后:';
echo '<pre>'.print_r($result,true).'</pre><br>';
图array_intersect
: 计算数组元素的交集(相同元素),返回值为相同元素组成的新数组
例
<?php
$arr = [10,20,30,40];
$arr1 = [20,30,50,60];
// 返回值为相同元素组成的新数组
$res = array_intersect($arr,$arr1);
print_r($res);
图array_intersect_assoc
: 返回数组交集,键名也做比较,键值对相同才会返回
例
<?php
// `array_intersect_assoc`: 返回数组交集,键名也做比较,键值对相同才会返回
$arr = ['id'=>10,'name'=>'杨过','email'=>'yangguo@admin.cn'];
$arr1 = ['id'=>10,'name1'=>'杨过','email'=>'xiaolongnv@admin.cn'];
$res = array_intersect_assoc($arr,$arr1);
echo '键与值其中一个不相同就不会返回<br>';
print_r($res);
图array_diff
:返回数组的差集
例
<?php
// `array_diff`:返回数组的差集
$arr = ['id'=>10,'name'=>'杨过','email'=>'yangguo@admin.cn'];
$arr1 = ['id'=>10,'name'=>'小龙女','email'=>'xiaolongnv@admin.cn'];
//参数1为源数组,参数2为比较数组,返回值为源数组作为基础与比较数组不相同的元素
$res = array_diff($arr,$arr1);
print_r($res);
图
8. 分割与合并
array_combine
: 通过合并两个数组来创建一个新数组
例
<?php
$arr = ['id','name','email'];
$arr1 = [100,'杨过','yangguo@admin.cn'];
// 参数1数组为键,参数2数组为值,返回一个新数组
$res = array_combine($arr,$arr1);
print_r($res);
图array_merge
: 把一个或多个数组合并为一个数组
例
<?php
// `array_merge`: 把一个或多个数组合并为一个数组
$arr = ['c'=>'cat','d'=>'dog','t'=>'tiger'];
$arr1 = ['c'=>'colt','t'=>'tabby','h'=>'horse'];
// 两个数组合并,同键名的,第二个数组会覆盖掉前一个数组的元素
$res = array_merge($arr,$arr1);
echo '<pre>'.print_r($res,true).'</pre><hr>';
// 如果只是想把第二个数组里面不同键名的元素合并进第一个数组,可以使用'+'号
$res = $arr +$arr1;
echo '这是使用+号合并';
echo '<pre>'.print_r($res,true).'</pre>';
图array_chunk
: 将一个数组分割成多个子数组
例
<?php
// `array_chunk`: 将一个数组分割成多个子数组
// 可以理解成分成几份来显示
$arr = [7,8,6,10,11,1,3,5,20];
// 返回值为分割后的多为数组
echo '<pre>'.print_r(array_chunk($arr,3),true).'</pre>';
图
9. 数组指针
current
: 获取当前元素的值
例
<?php
// `current`: 获取当前元素的值
$arr1 = [
['id'=>101,'name'=>'杨过','email'=>'yangguo@admin.cn'],
['id'=>102,'name'=>'小龙女','email'=>'小龙女@admin.cn'],
['id'=>103,'name'=>'尹志平','email'=>'尹志平@admin.cn'],
];
print_r(current($arr1));
图key
: 获取当前元素的键名
例
<?php
// `current`: 获取当前元素的值
$arr1 = [
['id'=>101,'name'=>'杨过','email'=>'yangguo@admin.cn'],
['id'=>102,'name'=>'小龙女','email'=>'小龙女@admin.cn'],
['id'=>103,'name'=>'尹志平','email'=>'尹志平@admin.cn'],
];
//返回值为当前指针指向的元素的键名
echo key($arr1);
图:指针未移动当前元素的键为0next
: 将数组中的内部指针向前移动一位
例
<?php
$arr1 = [
['id'=>101,'name'=>'杨过','email'=>'yangguo@admin.cn'],
['id'=>102,'name'=>'小龙女','email'=>'小龙女@admin.cn'],
['id'=>103,'name'=>'尹志平','email'=>'尹志平@admin.cn'],
];
// `next`: 将数组中的内部指针向前移动一位
echo '当前指针指向的键:'. key($arr1) . '<br>当前指向的元素:';
print_r(current($arr1));
echo '<hr>';
//指针下移
next($arr1);
echo '下移后指针指向的键:'. key($arr1) . '<br>下移后指向的元素:';
print_r(current($arr1));
图prev
: 将数组的内部指针倒回一位
例
<?php
$arr1 = [
['id'=>101,'name'=>'杨过','email'=>'yangguo@admin.cn'],
['id'=>102,'name'=>'小龙女','email'=>'小龙女@admin.cn'],
['id'=>103,'name'=>'尹志平','email'=>'尹志平@admin.cn'],
];
next($arr1);
echo '当前指针指向的键:'. key($arr1) . '<br>当前指向的元素:';
print_r(current($arr1));
echo '<hr>';
prev($arr1);
echo '后退后指针指向的键:'. key($arr1) . '<br>后退后指向的元素:';
print_r(current($arr1));
图end
: 将数组的内部指针指向最后一个单元
例
<?php
$arr1 = [
['id'=>101,'name'=>'杨过','email'=>'yangguo@admin.cn'],
['id'=>102,'name'=>'小龙女','email'=>'小龙女@admin.cn'],
['id'=>103,'name'=>'尹志平','email'=>'尹志平@admin.cn'],
];
echo '当前指针指向的键:'. key($arr1) . '<br>当前指向的元素:';
print_r(current($arr1));
echo '<hr>';
end($arr1);
echo '指针指向最后一个键:'. key($arr1) . '<br>指针指向最后一个元素:';
print_r(current($arr1));
图reset
: 将数组的内部指针指向第一个单元
例
<?php
$arr1 = [
['id'=>101,'name'=>'杨过','email'=>'yangguo@admin.cn'],
['id'=>102,'name'=>'小龙女','email'=>'小龙女@admin.cn'],
['id'=>103,'name'=>'尹志平','email'=>'尹志平@admin.cn'],
];
end($arr1);
echo '指针指向最后一个键:'. key($arr1) . '<br>指针指向最后一个元素:';
print_r(current($arr1));
echo '<hr>';
reset($arr1);
echo '复位后指向的键:'. key($arr1) . '<br>复位后指向的元素:';
print_r(current($arr1));
图
10. 自动生成
array_fill
: 用给定的值填充数组
例
<?php
// `array_fill`: 用给定的值填充数组
// 参数1键名开始的位置,参数2表示需要几条数据,参数3为值
$res = array_fill(2,5,'computer');
echo '<pre>'. print_r($res,true) . '</pre>';
图array_fill_keys
: 使用指定的键和值填充数组
例
<?php
$arr = ['car','bus','egg'];
// 参数1为指定的数组其中的值作为新数组的键,参数2为新数组的值
// 返回值为一个新数组
$result = array_fill_keys($arr,'computer');
echo '<pre>'. print_r($result,true) . '</pre>';
图array_pad
: 以指定长度将一个值填充进数组
例
<?php
$arr = ['car','bus','egg'];
// `array_pad`: 以指定长度将一个值填充进数组
// 参数1为数组,参数2为长度,参数3为填充的值
// 参数2为正数 则填补到数组的右侧,如果为负则从左侧开始填补
$result = array_pad($arr,5,0);
echo '<pre>'. print_r($result,true) . '</pre>';
// 参数2为正数 则填补到数组的右侧,如果为负则从左侧开始填补
$result = array_pad($arr,-5,-1);
echo '<pre>'. print_r($result,true) . '</pre>';
图
11. 类型转换
list
: 将数组中的值赋予一组变量(类似解构赋值)
例
<?php
// `list`: 将数组中的值赋予一组变量(类似解构赋值)
$arr = [100,'杨过','yangguo@admin.cn'];
// 把数组里面的值,分别赋值给list里面的变量,如果list里面的变量多出来的会赋值为空
list($id,$name,$email) = $arr;
echo "\$id={$id},\$name={$name},\$email={$email}";
图implode
: 将数组元素按指定字符拼装成字符串
例
<?php
// `implode`: 将数组元素按指定字符拼装成字符串
$arr1 = ['apple','huawei','xiaomi'];
$res = implode('+',$arr1);
echo $res;
图explode
: 将字符串分割为数组
例
<?php
$arr1 = ['apple','huawei','xiaomi'];
$res = implode('+',$arr1);
echo $res.'<hr>';
// `explode`: 将字符串分割为数组 implode的逆操作
$arr2 = explode(',',$res);
print_r($arr2);
图extract
: 将关联数组拆分成变量名值对
例
<?php
// `extract`: 将关联数组拆分成变量名值对
$arr = ['id'=>10,'name'=>'杨过','email'=>'yangguo@admin.cn'];
extract($arr);
echo "id={$id},name={$name},email={$email}";
图compact
: 将一组变量名值对拼装成一个关联数组键值对
例
<?php
$arr = ['id'=>10,'name'=>'杨过','email'=>'yangguo@admin.cn'];
extract($arr);
echo "id={$id},name={$name},email={$email}.<hr>";
// `compact`: 将一组变量名值对拼装成一个关联数组键值对
// 返回值为关联数组
$res = compact('id','name','email');
print_r($res);
图
12. 回调处理
array_filter
: 用回调函数过滤数组中的单元
例
<?php
// `array_filter`: 用回调函数过滤数组中的单元
$arr = [null,10,5,'',0,false,20,'-1'];
// 它会过滤掉,值为空,null,0,false的元素,并返回过滤后的元素
$res = array_filter($arr);
print_r($res);
echo '<hr>';
// 也可以加入回调函数,来设置符合条件的元素返回
$res = array_filter($arr,function ($value) {return $value > 5;});
print_r($res);
图array_map
: 为数组的每个元素应用回调函数
例
<?php
// `array_map`: 为数组的每个元素应用回调函数
$arr = [2,5,7,10];
// 参数1为回调函数,参数2及2以上都是数组
// 参数1可以是闭包
$res = array_map(function ($value) {
return $value * $value;
},$arr);
print_r($res);
echo '<hr>';
//创建一个闭包
$sum = function ($value) {return $value * 2;};
//参数1为闭包
$res = array_map($sum,$arr);
print_r($res);
echo '<hr>';
$keys = ['id','name','email'];
$value = [100,'杨过','yangguo@admin.cn'];
//处理2个数组
$res = array_map(function ($key,$value) { return [$key=>$value];},$keys,$value);
print_r($res);
图
最后,感觉回调处理很重要啊,以前的很多实例都有用到,今天又写了一遍,但是感觉回调处理,还是有那么一点点懵,案例看少了,应用场景想不出来太多