PHP操作数组和字符串常用函数
1.操作数组的函数
range(起始值,结束值)
生在一个指定范围的地址
$array1 = range(10,20); //生成一个10-20的数组
print_r($array1);
//Array ( [0] => 10 [1] => 11 [2] => 12 [3] => 13 [4] => 14 [5] => 15 [6] => 16 [7] => 17 [8] => 18 [9] => 19 [10] => 20 )
echo '<br>';
$array2 = range('a','f'); //生成一个a-f的数组
print_r($array2);
//Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f )
echo '<br>';
$array3 = range('F','A'); //生成一个F-A的数组
print_r($array3);
//Array ( [0] => F [1] => E [2] => D [3] => C [4] => B [5] => A )
复制代码
array_rand(数组,随机取出元素的个数)
- 随机取出数组内元素,返回随机数组的下标
- 如果随机取出1个,返回整型下标
- 如果随机取出多个,返回整型下标数组
$array1 = range(10,20);
print_r(array_rand($array1,1)); //随机输出数组中的1位 3
echo '<br>';
print_r(array_rand($array1,4)); //随机输出数组中的4位 Array ( [0] => 1 [1] => 6 [2] => 7 [3] => 8 )
echo '<br>';
复制代码
shuffle(数组)
打乱数组(打乱成功返回true,打乱失败返回false)
$array1 = range(10,20);
print_r($array1);
echo '<br>';
shuffle($array1); //打乱数组
print_r($array1);
echo '<br>';
print_r($array1);
echo '<br>';
// Array ( [0] => 10 [1] => 11 [2] => 12 [3] => 13 [4] => 14 [5] => 15 [6] => 16 [7] => 17 [8] => 18 [9] => 19 [10] => 20 )
// Array ( [0] => 14 [1] => 16 [2] => 11 [3] => 10 [4] => 20 [5] => 19 [6] => 12 [7] => 13 [8] => 15 [9] => 17 [10] => 18 )
// Array ( [0] => 14 [1] => 16 [2] => 11 [3] => 10 [4] => 20 [5] => 19 [6] => 12 [7] => 13 [8] => 15 [9] => 17 [10] => 18 )
复制代码
is_array()
判断变量是否是数组类型
$array1 = range(10,20);
if(is_array($array1)){
echo '是数组';
}else{
echo '不是数组';
}
复制代码
array_search()
在数组中搜索给定的值,如果成功则返回相应的键名,如果找不到返回false
$array = range(10,20);
echo array_search(15,$array),'<br>'; //5
var_dump(array_search(30,$array)); //bool(false)
复制代码
2.操作数组键值函数
array_keys()和array_values()
- array_keys($array):返回数组中的所有键名
- array_values($array):返回数组中的所有值
$array = range('A','F');
$key = array_keys($array);
$value = array_values($array);
print_r($key); echo '<br>';
print_r($value); echo '<br>';
// Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 )
// Array ( [0] => A [1] => B [2] => C [3] => D [4] => E [5] => F )
复制代码
array_combine(键数组,值数组)
创建一个数组,用键数组的值做键名,值数组的值做值
$key = array('name','sex','age');
$value = array('李白','男','18');
$array = array_combine($key,$value);
print_r($array); echo '<br>';
//Array ( [name] => 李白 [sex] => 男 [age] => 18 )
复制代码
如果键数组和值数组的元素个数不一样,返回false
in_array(查找的值,数组)
作用:检查数组中是否包含某个值,返回bool类型
$array = array('name' => '李白', 'sex' => '男', 'age' => '18');
var_dump(in_array('18',$array)); echo '<br>'; //bool(true)
复制代码
查找数组的值:区分大小写,不区分数据类型
array_key_exists(键,数组)
检查键名或索引是否在数组中
$array = array('name' => '李白', 'sex' => '男', 'age' => '18');
var_dump(array_key_exists('sex',$array)); echo '<br>'; //bool(true)
var_dump(array_key_exists('sexs',$array)); echo '<br>'; //bool(false)
复制代码
isset(变量名)
检测变量是否设置,并且设置的值不为null
//array_key_exists()和isset()的区别
$array = array('name' => '李白', 'sex' => '男', 'age' => '18', 'add' => NULL);
var_dump(array_key_exists('name',$array),isset($array['name'])); echo '<br>'; //bool(true) bool(true)
var_dump(array_key_exists('add',$array),isset($array['add'])); echo '<br>'; //bool(true) bool(false)
复制代码
3.数组连接和字符串分割函数
将数组的值连接成字符串:implode()
别名是join(),将数组的值连接成字符串
$array1 = array('李白','男','18',NULL);
$array2 = implode('-',$array1); //将数组的值连接成字符串
echo $array2,'<br>'; //李白-男-18-
复制代码
将字符串分割成数组: explode()
$array2 = '李白-男-18-';
$array3 = explode('-',$array2);
print_r($array3); echo '<br>'; //Array ( [0] => 李白 [1] => 男 [2] => 18 [3] => )
复制代码
4.数组运算函数
数组合并: array_merge()
$array1 = array_merge(range('a','f'),range('A','F'),range(0,9));
print_r($array1);
//Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => A [7] => B [8] => C [9] => D [10] => E [11] => F [12] => 0 [13] => 1 [14] => 2 [15] => 3 [16] => 4 [17] => 5 [18] => 6 [19] => 7 [20] => 8 [21] => 9 )
复制代码
数组合并时候下标冲突,按如下规则解决:
- 如果是字符串下标,后面的元素将前面的元素覆盖
- 如果在整数下标,重新建立下标索引
$array1 = array('name'=>'李白','sex'=>'男','age'=>'18','ctiy'=>'广州',0=>'lb');
$array2 = array('name'=>'杜甫','sex'=>'女','age'=>'28',0=>'dp');
$array3 = array_merge($array1,$array2);
print_r($array3);
//Array ( [name] => 杜甫 [sex] => 女 [age] => 28 [ctiy] => 广州 [0] => lb [1] => dp )
echo '<br>';
复制代码
数据的差集:array_diff(数组1,数组2,数组3,…)
$array1 = range(10,20);
$array2 = range(0,12);
$array3 = range(18,30);
print_r(array_diff($array1,$array2)); echo '<br>';
//Array ( [3] => 13 [4] => 14 [5] => 15 [6] => 16 [7] => 17 [8] => 18 [9] => 19 [10] => 20 )
print_r(array_diff($array1,$array2,$array3)); echo '<br>';
//Array ( [3] => 13 [4] => 14 [5] => 15 [6] => 16 [7] => 17 )
//下标不会娈,和下标没关系
复制代码
数组相交:array_intersect(数组1,数组2,数组3,…) 数组的交集结果中,下标使用的是第一个数组的下标。 取两个数组中一样的
$array1 = range(10,20);
$array2 = range(0,12);
$array3 = range(18,30);
print_r(array_intersect($array1,$array2)); echo '<br>';
//Array ( [0] => 10 [1] => 11 [2] => 12 )
print_r(array_intersect($array1,$array3)); echo '<br>';
//Array ( [8] => 18 [9] => 19 [10] => 20 )
复制代码
5.使用回调函数的函数
回调函数:计算机自己调用的函数,不需要手动调用。
array_map('函数名','数组')
调用PHP自身的函数
$array1 = array(10,-20,-30,52);
$new_array1 = array_map('abs',$array1); //aba中PHP中自身的函数(绝对值)
print_r($new_array1); echo '<br>';
//Array ( [0] => 10 [1] => 20 [2] => 30 [3] => 52 )
复制代码
调用自定义函数
function fun($name){
return '你好'.$name;
}
$array = array('呵呵','哈哈');
$new_array = array_map('fun',$array);
print_r($new_array); echo '<br>';
//Array ( [0] => 你好呵呵 [1] => 你好哈哈 )
复制代码
$array = array('呵呵','哈哈');
$new_array = array_map(function ($name){
return '你好'.$name;
},$array);
print_r($new_array); echo '<br>';
//Array ( [0] => 你好呵呵 [1] => 你好哈哈 )
复制代码
array_map()支持一次处理多个数组,将所有数组中同位置的元素作为参数传递给回调函数
$php = array('68','54','78','62');
$MySQL = array('45','87','98','36');
function fun($php,$MySQL){
return $php+$MySQL;
}
$new_array = array_map('fun',$php,$MySQL);
print_r($new_array); echo '<br>';
//Array ( [0] => 113 [1] => 141 [2] => 176 [3] => 98 )
复制代码
array_map()默认可以将多个数组的同位置的元素组成新数组
//null表示默认操作
$php = array('68','54','78','62');
$MySQL = array('45','87','98','36');
function fun($php,$MySQL){
return $php+$MySQL;
}
$new_array = array_map(null,$php,$MySQL);
print_r($new_array); echo '<br>';
//Array ( [0] => Array ( [0] => 68 [1] => 45 ) [1] => Array ( [0] => 54 [1] => 87 ) [2] => Array ( [0] => 78 [1] => 98 ) [3] => Array ( [0] => 62 [1] => 36 ) )
复制代码
++array_map()只能处理值,不能处理键++
array_walk(数组,回调函数)
作用:对数组中的每个元素的键值进行对调处理,类似于foreach循环
- 如果回调函数是一个参数,则这个参数是值
- 如果调用函数是两个参数,第一个是值,第二个是键
$array = array('name'=>'李白','sex'=>'男','age'=>'18','ctiy'=>'广州',0=>'lb');
function funs($value,$key){
echo $key,'-',$value,'<br>';
}
function fun($key){
echo $key,'<br>';
}
array_walk($array,'fun');
echo '<br><br>';
array_walk($array,'funs');
// 李白
// 男
// 18
// 广州
// lb
// name-李白
// sex-男
// age-18
// ctiy-广州
// 0-lb
复制代码
6.栈和队列
- 栈和队列都属于数据结构
- 栈是先进后出
- 队列是先进先出
实现栈效果的函数
- array_push(数组,入[栈|队列]的值) //类似追加
- array_pop():出栈,将最尾部的元素弹出 //删除最后一个
$array = array();
array_push($array,'李白'); //入栈
array_push($array,'杜甫','白居易'); //入栈
print_r($array); echo '<br>'; //Array ( [0] => 李白 [1] => 杜甫 [2] => 白居易 )
array_pop($array); //出栈
print_r($array); echo '<br>'; //Array ( [0] => 李白 [1] => 杜甫 )
复制代码
++array_push()和array_pop()作用在于维护一个连续的存储空间;为新增加的元素重写下标(索引)++
实现队列效果的函数
- array_shift():出队列,将队列中的第一个元素移除 //删除头
- array_unshift():在数组的开头插入一个元素 //头插入
$array = array();
array_unshift($array,'李白'); //堆栈
array_unshift($array,'杜甫','白居易'); //堆栈
print_r($array); echo '<br>'; //Array ( [0] => 杜甫 [1] => 白居易 [2] => 李白 )
array_shift($array); //出栈
print_r($array); echo '<br>'; //Array ( [0] => 白居易 [1] => 李白 )
复制代码
7.数组排序函数
sort() :按值进行升序排列,不保持原来的键值关联
$list = array('a'=>10,'c'=>5,'b'=>12);
sort($list);
print_r($list); echo '<br>';
//Array ( [0] => 5 [1] => 10 [2] => 12 )
复制代码
rsort():按值进行降序排列,不保持原来的键值关联
$list = array('a'=>10,'c'=>5,'b'=>12);
rsort($list);
print_r($list); echo '<br>';
//Array ( [0] => 12 [1] => 10 [2] => 5 )
复制代码
asort():按值进行升序排列,保持原来的键值关联
$list = array('a'=>10,'c'=>5,'b'=>12);
asort($list);
print_r($list); echo '<br>';
//Array ( [c] => 5 [a] => 10 [b] => 12 )
复制代码
arsort():按值进行降序排列,保持原来的键值关联
$list = array('a'=>10,'c'=>5,'b'=>12);
arsort($list);
print_r($list); echo '<br>';
//Array ( [b] => 12 [a] => 10 [c] => 5 )
复制代码
ksort():按键进行升序排列
$list = array('a'=>10,'c'=>5,'b'=>12);
ksort($list);
print_r($list); echo '<br>';
//Array ( [a] => 10 [b] => 12 [c] => 5 )
复制代码
krsort():按键进行降序排列
$list = array('a'=>10,'c'=>5,'b'=>12);
krsort($list);
print_r($list); echo '<br>';
//Array ( [c] => 5 [b] => 12 [a] => 10 )
复制代码
natsort():自然排序
$list = array('stu_3','stu_1','stu_15','stu_10','stu_260');
sort($list);
print_r($list); echo '<br>';
//按每一位数字分开比较排序
//Array ( [0] => stu_1 [1] => stu_10 [2] => stu_15 [3] => stu_260 [4] => stu_3 )
natsort($list);
print_r($list); echo '<br>';
//按整体数字比较排序
//Array ( [0] => stu_1 [4] => stu_3 [1] => stu_10 [2] => stu_15 [3] => stu_260 )
复制代码
usort():用户自定义排序
$stu = array(
array('name'=>'李白','age'=>22,'score'=>65),
array('name'=>'杜甫','age'=>12,'score'=>77),
array('name'=>'白居易','age'=>8,'score'=>87),
array('name'=>'王安石','age'=>32,'score'=>20),
);
function fun($stu1,$stu2){
if($stu1['age']<$stu2['age'])
return -1;
elseif ($stu1['age']>$stu2['age'])
return 1;
else
return 0;
}
usort($stu,'fun');
echo '<pre>';
print_r($stu);
// Array
// (
// [0] => Array
// (
// [name] => 白居易
// [age] => 8
// [score] => 87
// )
// [1] => Array
// (
// [name] => 杜甫
// [age] => 12
// [score] => 77
// )
// [2] => Array
// (
// [name] => 李白
// [age] => 22
// [score] => 65
// )
// [3] => Array
// (
// [name] => 王安石
// [age] => 32
// [score] => 20
// )
// )
复制代码
8.字符串操作函数
[] 字符串可以理解成字符的集合,所以可以通过[]来访问。不能操作中文
$stu = 'abcdefg';
echo $stu[0],'<br>'; //a
$stu[2] = 'C';
echo $stu,'<br>'; //abCdefg
复制代码
strlen() 返回字符串长度,以字节为单位
$stu = 'abcdefg';
echo strlen($stu),'<br>'; //7
$str = '中文';
echo strlen($str),'<br>'; //6
//在gbk下一个汉字2个字节,在utf8下一个汉字3个字节。
复制代码
trim()、ltrim()、rtrim():去空白字符
- trim():去字符串两边的把空格
- ltrim():去字符串左边的空格
- rtrim():去字符串右边的空格
strpos()
- strpos():查找字符串首次出现的位置
- strrpos():查找字符串最后一次出现的位置
$stu = 'abcdefga';
echo strpos($stu,'a'),'<br>'; //0
echo strrpos($stu,'a'),'<br>'; //7
复制代码
str_repeat():重复字符串
$word = 'hello!';
echo str_repeat($word,3),'<br>'; //hello!hello!hello!
复制代码
chr()、ord()
$num = ord('A'); //获取字符的Asc||码
echo $num,'<br>'; //65
echo chr($num),'<br>'; //将ASC||转成字符 A
复制代码
substr(字符串,开始位置,截取长度):截取字符串
$num = 'abcdef';
echo substr($num,1,3),'<br>'; //bck
echo substr($num,-3,2),'<br>'; //de
echo substr($num,-1,2),'<br>'; //f
//长度省略就截取到结尾
echo substr($num,1),'<br>'; //bcdef
echo substr($num,-4),'<br>'; //cdef
//长度为负表示后面有几个字符不截取
echo substr($num,1,-1),'<br>'; //bcde
echo substr($num,-4,-2),'<br>'; //cd
复制代码
strchr()、strrchr()
$num = 'abcdebf';
echo strchr($num,'b'),'<br>'; //bcdebf //从哪个字符开始往后截取
echo strrchr($num,'b'),'<br>'; //bf //从哪个字符最后一个开始往后截取
复制代码
str_replace():替换字符串
$num = '明日复明日,明日何其多';
echo str_replace('明日','今日',$num),'<br>'; //所有明日替换成今日:今日复今日,今日何其多
$array1 = array('明日','复','何其');
$array2 = array('一天','又','非常');
echo str_replace($array1,$array2,$num),'<br>';//一天又一天,一天非常多
复制代码
str_split():将字符串分割成数组
$str = 'abcdef';
print_r(str_split($str)); echo '<br>';
//Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f )
print_r(str_split($str,2)); echo '<br>';
//Array ( [0] => ab [1] => cd [2] => ef )
复制代码
str_pad(待填充字符串,总位数,填充字符,填充位置) 填充字符串
$stuid = 12;
echo str_pad($stuid,4,'0'),'<br>'; //1200
echo str_pad($stuid,4,'0',STR_PAD_LEFT),'<br>'; //0012 在左边加
echo str_pad($stuid,4,'0',STR_PAD_BOTH),'<br>'; //0120 在两边加
复制代码
字符串大小写转换
echo strtolower('I AM A BOY'),'<br>'; //转换成小写
echo strtoupper('i am a boy'),'<br>'; //转换成小写
复制代码
nl2br():将字符串的换行转成
nl2br() //常用于文本域换行
复制代码
htmlspecialchars():将HTML字体转成实体
echo htmlspecialchars('<p>呵呵</p>'),'<br>'; //<p>呵呵</p>
复制代码
urlencode()、urldecode():url编码和解码
echo urlencode('明日复明日,明日何其多'),'<br>';//%E6%98%8E%E6%97%A5%E5%A4%8D%E6%98%8E%E6%97%A5%EF%BC%8C%E6%98%8E%E6%97%A5%E4%BD%95%E5%85%B6%E5%A4%9A
echo urldecode('%E6%98%8E%E6%97%A5%E5%A4%8D%E6%98%8E%E6%97%A5%EF%BC%8C%E6%98%8E%E6%97%A5%E4%BD%95%E5%85%B6%E5%A4%9A'),'<br>'; //明日复明日,明日何其多
复制代码
9.多字节字符串处理函数
PHP默认本身不支持多字节处理。要开启mb_扩展(multibytes). ==开启extension=php_mbstring.dll==
mb_strlen():获取字符串的长度
$str = '明日何其多';
echo mb_strlen($str),'<br>'; //15
echo mb_strlen($str,'utf-8'),'<br>'; //5
复制代码
mb_internal_encoding():设置/获取内部字符编码
$str = '明日何其多';
echo mb_internal_encoding(),'<br>'; //ISO-8859-1
echo mb_strlen($str),'<br>'; //15
echo mb_strlen($str,'utf-8'),'<br>'; //5
mb_internal_encoding('utf-8'); //设置PHP编码为utf-8
echo mb_internal_encoding(),'<br>'; //utf-8
echo mb_strlen($str),'<br>'; //5
复制代码
mb_strpos():查找字符串在另一个字符串中的位置
$str = '明日何其多';
echo mb_strpos($str,'何'),'<br>';//6
mb_internal_encoding('utf-8'); //设置PHP编码为utf-8
echo mb_strpos($str,'何'),'<br>';//2
echo strpos($str,'何'),'<br>';//6
复制代码
mb_substr():获取子字符串
<?php
$str = '明日何其多';
mb_internal_encoding('utf-8'); //设置PHP编码为utf-8
echo substr($str,1,2),'<br>';//乱码
echo mb_substr($str,1,2),'<br>';//日何
?>
复制代码
10.字符串编码
iconv(输入的编码,输出编码,字符串)
$str = '明日何其多';
echo strlen($str),'<br>';//15
$str_gbk = iconv('utf-8','gbk',$str); //将字符串转成gbk格式
echo strlen($str_gbk),'<br>';//10
作者:渲染流星的颜色
链接:https://juejin.im/post/5acd57fc6fb9a028c81332da
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。