数组函数大全
函数的三要素
1,功能
2,参数
3,返回子
对我来说比较难的数组函数是
-1,array_search
:搜索数组中指定的值,返回其键名。(参数一:需要搜索的值;参数二:目标数组)
-2,usort
:自定义函数对目标数组的值进行排序
(参数一:目标数组;参数二:函数)
-3,natsort
:支持数字型字符串排序(自然排序)
(参数:目标数组。 主要要理解其功能,是按照人通常的想法去排序,比如(自然排序升序):img3<img10<img12
)
-4,array_flip
:交换数组中的键和值
(参数:目标数组)
-5,array_reverse
:反转一个数组
(参数:目标数组)
-6,array_slice
:从一个数组中取出一部分元素
(参数一:目标数组;参数二:从哪个索引开始;参数三:从索引开始后,往后几个结束)
-7,array_splice
:去掉数组中的一部分,并用其他代替
(参数一:目标数组;参数二:从哪个索引开始;参数三:从索引开始后,往后几个结束;参数四:替代的数组或值)
-8,array_replace
:使用后面一个数组的值替换前一个数组的值
-9,array_combine
:将两个数组合并成新数组,且第一个数组的值作为键,第二个数组的值作为相对应的值
-10,array_merge
:把一个或多个数组合并成一个数组,且键名相同的,后面数组的值会覆盖前一个数组的值,如果键名不同值相同,则直接合并到后面
-11,array_fill
:用给定的值填充数组。
(参数一,从索引几开始;参数二:填充数量;参数三:填充的值)
-12,array_fill_keys
:用给定的键和值填充数组。
(参数一:键名(可以是数组);参数二:填充的值)
-13,array_pad
:将一个值填充进数组,并填充至指定长度。
(参数一:填充的数组;参数二:填充的长度的绝对值必须大于数组本身的长度,如果为真,就填充到数组右侧,为负,测填充到左侧,默认为右侧)
-14,implode
:用指定字符串将数组分割成字符串
(参数一:字符串;参数二:目标数组)
-15,explode
把字符串分割,重组为新数组
(参数一:字符串(主要看字符串中的分隔符是什么);参数二:目标字符串)
-16,extract
:将关联数组,转换成键值对(变量)
(参数:目标关联数组)
-17,compact
:将变量转换成关联数组
(参数:变量的键名)
-18,array_filter
:用回调函数过滤数组中的单元
(参数一:目标数组;参数二:闭包函数),如果没有设置参数二,则会过滤目标数组总的空白值
-19,array_map
:为数组中的每个元素执行一次回调函数
-20,array_walk
:使用用户自动定义的函数对数组中的每个元素进行回调
以下是关于数组函数的上机操作
<?php
namespace chapter10;
//常用数组函数大全
//一,与键相关
//1,获取所有键名组成的数组:array_keys();
$arr1 = ['哈哈', '呵呵', 20, 'id' => 1];
print_r(array_keys($arr1));
echo '<hr>';
//2,是否存在指定键名:array_key_exists();
var_dump(array_key_exists('3', $arr1));
echo '<hr>';
//3,获取最后一个键名:array_key_last();
var_dump(array_key_last($arr1));
echo '<hr>';
//4,获取数组中第一个键名:array_key_frist();
var_dump(array_key_first($arr1));
echo '<hr>';
//二,与键相关
$arr2 = ['id' => 1, 'name' => '王老师', 20, '很帅', 20, 1];
//1,返回数组中,所有值组成的数组:array_values();
var_dump(array_values($arr2));
echo '<hr>';
//2,检查数组中是否存在某个值:in_array();
var_dump(in_array('很帅', $arr2));
echo '<hr>';
//3,搜索指定的值返回键名:array_search();
var_dump(array_search('1', $arr2));
echo '<hr>';
//4,删除数组这种重复的值:array_unique();
var_dump(array_unique($arr2));
echo '<hr>';
//三,与统计相关
//1,统计数组中元素的数量或对象中属性的数量:count();
$arr2 = ['id' => 1, 'name' => '王老师', 20, '很帅', 20, 1];
var_dump(count($arr2));
echo '<hr>';
//2,统计所有值出现的频率
var_dump(array_count_values($arr2));
echo '<hr>';
//四,栈与队列 栈是后进先出 队列是先进先出
//1,从尾部添加一个或多个元素 :array_push()
$arr3 = [1, 2, 3, 4, 5, 'id' => '3'];
//添加多个元素是从左往右一次添加到数组的后面
print_r(array_push($arr3, 6));
echo '<hr>';
print_r($arr3);
echo '<hr>';
//2,从数组的尾部删除一个元素 :array_pop()
var_dump(array_pop($arr3));
print_r($arr3);
//3,从头部添加一个或多个元素 : array_unshift()
var_dump(array_unshift($arr3, 6, 7));
print_r($arr3);
//4,从头部删除一个元素 :array_shift()
var_dump(array_shift($arr3));
var_dump(array_shift($arr3));
//五,与计算相关
//1,对数组中所有值求和 array_sum();
$arr4 = [1, 2, 3, 4];
var_dump(array_sum($arr4));
//2,计算数组中所有值的乘积
var_dump(array_product($arr4));
echo '<hr>';
//六,排序
//6.1 对值排序
$arr5 = [1, 3, 2, 5, 20, 15];
//1,按值进行升序排序:sort()
//sort($arr5);
print_r($arr5);
//2,按值进行排序并且索引键名不变 asort()
asort($arr5);
print_r($arr5);
//3,按值进行降序排列 rsort()
//rsort($arr5);
//print_r($arr5);
//4,按值进行降序排列并且索引键名不发生变化: arsort();
arsort($arr5);
print_r($arr5);
//6.2,对键排序
//1,按键名进行升序排列 ksort()
$arr5 = [1, 3, 2, 5, 20, 'id' => 3, 15];
ksort($arr5);
print_r($arr5);
//2,按键名进行降序排列 krsort()
krsort($arr5);
print_r($arr5);
echo '<hr>';
//6.3,自定义排序
$arr6 = [1, 3, 2, 5, 20, 'id' => 4, 30];
//1,自定义函数对值进行排序 :usort()
//usort($arr6, function ($value1 ,$value2 ){return ($value1 - $value2)<0;});
print_r($arr6);
//2,自定义函数对值进行排序并且键名保持不变 : uasort();
uasort($arr6, function ($value1, $value2) {
return ($value1 - $value2) > 0;
});
print_r($arr6);
//3,自定义函数对键名进行排序: uksort();
uksort($arr6,function ($key1, $key2) {
return ($key1 - $key2) > 0;
} );
print_r($arr6);
//6.4,自然排序
$arr7 = [1, 3, 'age'=>'ha', 5, 20, 'id' => 'Hb', 'name'=>'小江'];
//1,支持数字型字符串排序 :natsort();
//natsort($arr7);
print_r($arr7);
//2,不区分大小写
natcasesort($arr7);
print_r($arr7);
//6.5,乱序与反转
//1,随机打乱一个数组的顺序 : shuffle()
$arr8 = [2,5,3,4,'id'=>1];
//shuffle($arr8);
//print_r($arr8);
//2,交换一个数组中的键和值
print_r(array_flip($arr8));
//print_r($arr8);echo '<hr>';
//3,反转一个数组: array_reverse();
var_dump(array_reverse($arr8));
<?php
//七,查询与替换
//1,从数组中取出一部分:array_slice();
$arr1 = [1,2,3,4,5];
var_dump(array_slice($arr1, -4, -1, true));
print_r($arr1);
//2,去掉数组中的一部分,并用其他值代替 array_splice()
var_dump(array_splice($arr1, 1,2, [6, 6]));
print_r($arr1);
//3,从数组中随机获取一个或多个元素的键名 array_rand()
var_dump(array_rand($arr1, 2));
//4,获取多维数组中的一列组成新数组 array_column()
$arr2 = [['id'=>1,'name'=>'小王'],['id'=>2,'name'=>'小江'],['id'=>3, 'name'=>'小张']];
var_dump(array_column($arr2, 'name'));echo '<hr>';
//5,使用后面数组的值替换第一个数组的值 array_replace()
print_r(array_replace($arr1, $arr2));
//6,使用递归的数组递归替换第一个数组的元素 array_replace_recursive()
//7,返回数组的值的交集 array_intersect()
$arr1 = [1,2,7,4,5];
$arr3 = [6,2,3,8,4];
var_dump(array_intersect($arr1, $arr3));echo '<hr>';
//8,返回数组的值的交集,键名也做比较 array_intersect_assoc()
var_dump(array_intersect_assoc($arr1, $arr3));
//8,返回数组的值的差集 array_diff();
var_dump(array_diff($arr1, $arr3));
//9,返回数组的值的差集,键名也做比较 array_diff_assoc();
var_dump(array_diff_assoc($arr1, $arr3));
//8,切割与合并
//1,将两个数组合并成一个新数组 array_combine();,第一个数组的值作为新数组的键名,第一个数组的值作为新数组的值
var_dump(array_combine($arr1, $arr3));
//2,把一个或多个数组合并成一个数组, array_merge();
var_dump(array_merge($arr1, $arr3));echo '<hr>';
//3,将一个数组分割成多个数组 array_chunk()
var_dump(array_chunk($arr1,2));
//9,自动生成
//1,用给定的值填充数组 array_fill()
$arr4 = [1,2,3,6,7,8];
var_dump(array_fill(1, 4,2));
//2,用指定的键和值填充数组 array_fill_keys()
var_dump(array_fill_keys([1,2,3,4] , 2));echo '<hr>';
//3, 以指定长度将一个填充进数组 array_pad(),第二个参数的绝对值要大于补充数组的元素数量
var_dump(array_pad($arr4, -8, 2));
//10,类型转换
//1,将数组中的值赋予给一组变量 list()
$arr5 = [1,2,3];
list($id, $name, $age)=$arr5;
echo $id;
//2,将数组中的元素按指定字符分割成字符串 implode();
var_dump(implode('=', $arr5));
//3,将字符串中的字符分割,组成一个新数组 explode();
var_dump(explode('=', implode('=', $arr5)));
//4,将关联数组拆分成,变量名=值 extract()
$arr6 = ['id'=>1, 'name'=>'小江'];
print_r(extract($arr6));
echo $name;
//5,将一组变量名=值,变成一个关联数组 compact()
$id = 20;
$name = '小王';
$study = '学习';
$sex = 1;
$age = ['sex', 'study'];
$result = compact('id', 'name', $age);
print_r($result);
//12,回调处理
//1,用回调函数过滤数组中的单元:array_filter();
$arr6 = [1,2,3,6,7,8];
var_dump(array_filter($arr6, function ($value){return $value>5;}));
//2,为数组中的每个元素使用回调函数 :array_map()
var_dump(array_map(function ($value){return $value*2;}, $arr6));
附加
以下是字符串函数大全(常用)的上机操作,我也手写了一遍
<?php
//1,将字符串分割成小块 chunk_split()
$str = 'A,23,456';
var_dump(chunk_split($str, 2, 9));
echo chunk_split($str, 2); echo '<hr>';
//2,用字符串分割字符串 explode()
var_dump(explode(',', $str));echo '<hr>';
//3,将一个一维数组的值转化为字符串
$arr1 = ['id'=>1,'name'=>'王', 3, 4, 5];
var_dump(implode('-', $arr1)); echo '<hr>';
//4,使一个字符串的第一个字符小写(如果是英文的话), lcfirst();
var_dump(lcfirst($str));echo '<hr>';
//5,删除一个字符串开头(左边)的空白字符(或其他文件); ltrim();
var_dump(ltrim($str,'A\,'));echo '<hr>';
//6,转换一个字符串的第一个字节的值为0-255之间的值 ord();
var_dump(ord($str));echo '<hr>';
//7,将字符串解析成多个变量(该字符串必须是URL传递入的查询字符串或相同格式) parse_str();
print_r($_SERVER['QUERY_STRING']);echo '<br>';
$qs = $_SERVER['QUERY_STRING'];
$a = 'id=2&name=3';
parse_str($a,$sq);
echo $sq['id'];print_r($sq);echo '<hr>';
//8,使用另一个字符串填充字符串到指定长度 str_pad();
$str1 = '123';
var_dump(str_pad($str1, 5,'a',STR_PAD_BOTH));echo '<hr>';
//9,重复一个字符串 str_repeat();
var_dump(str_repeat($str1, 2));echo '<hr>';
$str2 = '456';
//10,子字符串的替换 str_replace();
var_dump(str_replace('aaa', 'bbb', 'aaa=ccc'));echo '<hr>';
//11,随机打乱一个字符串 str_shuffle();
var_dump(str_shuffle($str2));echo '<hr>';
//12,将字符串转换为数组 str_split();
var_dump(str_split($str2, 2));echo '<hr>';
//13,去除字符串中HTML和PHP的标记
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo strip_tags($text, '<p><a>');echo '<hr>';
//14,查找字符串在一个字符串中首次出现的位置: srtpos();
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
// 注意这里使用的是 ===。简单的 == 不能像我们期待的那样工作,
// 因为 'a' 是第 0 位置上的(第一个)字符。
if ($pos === false) {
echo "The string '$findme' was not found in the string '$mystring'";
} else {
echo "The string '$findme' was found in the string '$mystring'";
echo " and exists at position $pos";
}echo '<hr>';
//15,计算字符串出现的次数 substr_count()
$str3 = 'asdfgh';
var_dump(substr_count($str3, 'd', 1));echo '<hr>';
//16,替换字符串的字串:substr_replace();
var_dump(substr_replace($str3, 123, 2, 0));echo '<hr>';
//17,返回字符串的字串:substr();
var_dump(substr($str3,3));
谢谢老师审阅