常用函数
range(起始值,终止值):指定一个指定范围的数组
数组合并 array_merge()
数组合并时,下标冲突:
如果是字符串下标,后面的元素将前面的元素覆盖
如果是整数下标,重新建立索引,并重0开始初始化索引
array_rand(数组,随机取出元素的个数)
随机取出数组内元素,随机返回数组下标
如果随机取出一个,返回整型下标,如果随机取出多个,返回整型下标数组。
shuffle(数组):打乱数组
打乱成功,返回1,否则返回0
验证码生成代码
<?php
//生成字母数字数组
$array=array_merge(range('a','z'),range('A','Z'),range('0','9'));
$index=array_rand($array,4);//随机取出4个元素
shuffle($array);//打乱数组
$str='';
foreach($index as $i) {
$str.=$array[$i];
}
echo $str;
?>
is_array();判断变量是否是数组
<?php
$array=10;
if(is_array($array)) {
echo '是数组';
}else {
echo '不是数组';
}
?>
操作数组键值函数
array_keys(array):返回数组中的所有键名
array_values(array):返回数组中的所有值
<?php
$person=array('name'=>'无痕','sex'=>'男','age'=>'24');
$keys=array_keys($person);
$values=array_values($person);
print_r($keys);echo'<br>';//Array ( [0] => name [1] => sex [2] => age )
print_r($values);//Array ( [0] => 无痕 [1] => 男 [2] => 24 )
?>
数组合并:
array_combine(key数组,values数组):
<?php
$keys=array('name','sex','age');
$values=array('无痕','男','24');
$array=array_combine($keys,$values);
print_r($array);//Array ( [name] => 无痕 [sex] => 男 [age] => 24 )
?>
注意:如果键数组和值数组的元素个数不一样,返回false
<?php
$keys=array('name','sex','age');
$values=array('无痕','男','24',30);
$array=array_combine($keys,$values);
print_r($array);//Warning: array_combine(): Both parameters should have an equal number of elements in D:\WAMP\Apache24\htdocs\demo.php on line 4
?>
in_array(查找的值,数组):在数组中
检查数组中是否包含某个值,找到
<?php
$person=array('name'=>'无痕','陈家洛','余鱼同','tom',123);
var_dump(in_array('无痕',$person));echo '<br>'; //bool(true)
var_dump(in_array('Tom',$person));echo '<br>'; //bool(false) 区分大小写
var_dump(in_array('123',$person));echo '<br>';//bool(true) 不区分数据类型
var_dump(array_key_exists('name',$person));//bool(true) 检测键是否存在
var_dump(array_key_exists('0',$person));//bool(true)
var_dump(array_key_exists('4',$person));//bool(false)
?>
arary_key_exits(键名,数组变量名):在数组中包含某一个键
isset(变量名):检测变量是否设置,并且设置的值不为NULL
array_key_exists() 和 isset()的区别
<?php
$person=array('name'=>'无痕','sex'=>'男','age'=>20,'add'=>NULL);
var_dump(array_key_exists('name',$person),isset($person['name']));echo '<br>'; //bool(true) bool(true)
var_dump(array_key_exists('add',$person),isset($person['add']));//bool(true) bool(false)
?>
数组链接和字符串分割函数
implode(),join 将数组的值连接成字符串输出
explode():将字符串分割成数组
<?php
$books=array('水浒传','红楼梦','书剑恩仇录');
$str=implode(',',$books); //以,相连接 join 和js中一样
echo $str,'<br>';//水浒传,红楼梦,书剑恩仇录
$array=explode(',',$str);
print_r($array);//Array ( [0] => 水浒传 [1] => 红楼梦 [2] => 书剑恩仇录 )
?>
数组运算函数
数组合并
array_merge(数组1,数组2,...)
数组差集
array_diff(数组1,数组2,数组3,...);
<?php
$array1=array('a','b','c','d',10,20);
$array2=array(8=>'a','b');//与下标没有关系
$array3=array(10,30);//没有的话就不参与运算,对结果没有影响
$array=array_diff($array1,$array2,$array3);//array1-array2-array3
print_r($array);//Array ( [2] => c [3] => d [5] => 20 )
?>
数组交集
array_intersect(数组1,数组2,数组3,...)
<?php
$array1=array('a','b','c','d',10,20);
$array2=array(8=>'a','b');
$array=array_intersect($array1,$array2);//用的是第一个数组的下标
print_r($array);//Array ( [0] => a [1] => b )
echo '<br>';
$array=array_intersect($array2,$array1);
print_r($array);//Array ( [8] => a [9] => b )
?>
数组的交集结果中下标使用的是第一个数组的下标
回调函数
计算机自己调用的函数,不需要手动调用。
array_map(‘函数名’,数组¥a) :让数组中的每一个值都调用这个函数
<?php
$array=array(10,20,30,-40);
$array_new=array_map('abs',$array);
print_r($array_new);//Array ( [0] => 10 [1] => 20 [2] => 30 [3] => 40 )
?>
<?php
$person=array('张三','李四','无痕');
function fun($name) {
Return '你好'.$name;
}
//$new_person=array_map('fun',$person);
//print_r($new_person);//Array ( [0] => 你好张三 [1] => 你好李四 [2] => 你好无痕 )
echo '<br>';
//匿名函数写法
$new_person=array_map(function ($name) {
Return '你好'.$name;
},$person);
print_r($new_person);
?>
array_map()支持一次处理多个数组,将所有数组中同位置的元素作为参数传递给回调函数
<?php
$Chinese=array(45,89,36);
$English=array(78,67,98);
//求平均值
function fun($Chin,$Eng) {
Return ($Chin+$Eng)/2;
}
print_r(array_map('fun',$Chinese,$English));//Array ( [0] => 61.5 [1] => 78 [2] => 67 )
?>
array_map()默认可以将多个数组的同位置的元素组成新数组,null表示默认操作:只能处理值,不能处理键
print_r(array_map(null,$Chinese,$English));
/*
Array
(
[0] => Array
(
[0] => 45
[1] => 78
)
[1] => Array
(
[0] => 89
[1] => 67
)
[2] => Array
(
[0] => 36
[1] => 98
)
)
*/
array_walk(数组,回调函数)
对数组中的每一个键值进行对调处理,类似于foreach循环,如果回调函数是一个参数,则这个参数是值,如果是两个参数
第一个参数是值,第二个参数是键。
<?php
$person=array('name'=>'无痕','sex'=>'男','age'=>24);
array_walk($person,function ($val) {
echo $val,' ';//无痕 男 24
});
echo '<hr>';
array_walk($person,function ($val,$key) {
echo $key,'-',$val,'  ';//name-无痕 sex-男 age-24
})
?>
栈和队列
栈和队列都属于数据结构
栈:后进先出
队列:先进先出
array_push(数组,入栈|队列的值)
array_pop:出栈,将最后一个出栈
<?php
//模拟栈
$person=array();
array_push($person,'张三');
array_push($person,'李四','王五','无痕');//多个入栈
print_r($person);//Array ( [0] => 张三 [1] => 李四 [2] => 王五 [3] => 无痕 )
array_pop($person);//出栈一个
echo '<br>';
print_r($person);//Array ( [0] => 张三 [1] => 李四 [2] => 王五 )
?>
array_push()和array_pop()作用在于维护一个连续的存储空间,为新增加的元素重写下标。
<?php
$person=array();
array_push($person,'张三','李四','王五','无痕');
print_r($person);//Array ( [0] => 张三 [1] => 李四 [2] => 王五 [3] => 无痕 )
echo '<br>';
array_shift($person);//出队列一个
print_r($person);//Array ( [0] => 李四 [1] => 王五 [2] => 无痕 )
echo '<br>';
array_unshift($person,'Tom');//在队列前插入一个
print_r($person);//Array ( [0] => Tom [1] => 李四 [2] => 王五 [3] => 无痕 )
?>
array_shift()出队列
array_unshift():在队列前面插入一个
数组排序:
sort(数组)
rsort(数组)://按照值的降序排序,不保持原来的键值关联
asort(数组)//按照值的降序排序,不保持
<?php
$array=array('a'=>2,'c'=>9,'b'=>6);
//sort($array)//按值进行升序排序,不保持原来的键值关联
//rsort($array)//按值进行降序排序,不保持原来的键值关联
//asort($array);//按值进行升序排序,保持原来的键值关联
arsort($array);//按值进行升序排序,保持原来的键值关联
print_r($array);//Array ( [c] => 9 [b] => 6 [a] => 2 )
?>
natsort(数组):自然排序
<?php
$array=array('book_2','book_4','book_1','book_11','book_13');
sort($array);//按值排序
print_r($array);//Array ( [0] => book_1 [1] => book_11 [2] => book_13 [3] => book_2 [4] => book_4 )
echo '<hr>';
natsort($array);//自然排序
print_r($array);//Array ( [0] => book_1 [3] => book_2 [4] => book_4 [1] => book_11 [2] => book_13 )
?>
用户自定义排序
<?php
$stu=array(
array('name'=>'aa','age'=>24,'score'=>99),
array('name'=>'cc','age'=>22,'score'=>88),
array('name'=>'bb','age'=>18,'score'=>66)
);
//sort($stu);//Array ( [0] => Array ( [name] => aa [age] => 24 [score] => 99 ) [1] => Array ( [name] => bb [age] => 18 [score] => 66 ) [2] => Array ( [name] => cc [age] => 22 [score] => 88 ) )
//print_r($stu);
usort($stu,function ($stu1,$stu2) {
if($stu1['age']<$stu2['age']) {
Return -1;
}elseif($stu1['age']>$stu2['age']) {
Return 1;
}else {
Return 0;
}
});
print_r($stu);//Array ( [0] => Array ( [name] => bb [age] => 18 [score] => 66 ) [1] => Array ( [name] => cc [age] => 22 [score] => 88 ) [2] => Array ( [name] => aa [age] => 24 [score] => 99 ) )
?>
字符串操作函数
字符串可以理解成字符的数组,所以可以用[]进行操作
<?php
$str='abcd';
echo $str[0],'<br>';//a
$str[3]='A';
echo $str;//abcA
?>
strlen():返回字符串的长度,以字节为单位
<?php
$str='abcd';
echo (strlen($str)),'<br>';//4
echo strlen('无痕');//6 GBK下一个中文两个字节 UTF-8一个中文三个字节
?>
trim():去空格
trim():去字符串两边的空白字符,ltrim()去字符串左边的空格, rtrim()去字符串右边的空格
<?php
$str=' abcde ';
echo strlen($str),'<br>';//9
echo strlen(trim($str)),'<br>';//5;
echo strlen(ltrim($str)),'<br>';//7
echo strlen(rtrim($str)),'<br>';//7
?>
strpos():查找字符串首次出现的位置
strrpos():查找字符串最后一次出现的位置
<?php
$str='abcad';
echo strpos($str,'c');//2
echo strrpos($str,'a');//3从后往前数
?>
str_repeat():重复字符串
<?php
$hello='你好';
echo str_repeat($hello,3);//你好你好你好
?>
chr(),ord():
<?php
$num=ord('A');//65 获取字符的ASCII码
echo $num;
echo chr($num);//A 将ASCII码转成字符
?>
substr(字符串,开始位置,截取长度)截取字符串:
<?php
$str='abcdefg';
echo substr($str,1,3),'<br>';//bcd
//起始位置是负数,表示从结尾向前数
echo substr($str,-4,3),'<br>';//def
//长度如果省略,就截取到结尾
echo substr($str,-3),'<br>';
//长度为负表示后面几个不截取
echo substr($str,2,-1);//cdef 后面一位不截取
?>
strchr():从左边字符开始截取
strrchr():从右边字符开始截取:
<?php
$str='abdccdf';
echo strchr($str,'c'),'<br>';// ccdf 从c开始截取
echo strrchr($str,'c');//cdf 从后面开始截取
?>
截取文件后缀
<?php
$str='qfda.jpg';
echo strrchr($str,'.');
?>
str_replace():替换字符串
<?php
$str='today is a fine day,i like today';
//echo str_replace('today','tomorrow',$str);//tomorrow is a fine day,i like tomorrow
//一次替换多个字符串
echo str_replace(array('today','day'),array('tomorrow','日'),$str);//tomorrow is a fine 日,i like tomorrow
?>
<?php
$str='无痕是我,我是无痕';
echo str_replace(array('无痕','我'),'你',$str),'<br>';//你是你,你是你
//后面的替换在前面的基础上进行
echo str_replace(array('我','你'),array('你','他'),$str);//无痕是他,他是无痕
?>
str_split():将字符串分割成数组
<?php
$str='abcd';
print_r(str_split($str)); echo '<br>';//Array ( [0] => a [1] => b [2] => c [3] => d )
print_r(str_split($str,2));//Array ( [0] => ab [1] => cd )
?>
str_pad(待填充字符,总位数,填充字符,填充位置):填充字符串
<?php
$str=46;
echo str_pad($str,4,'0'),'<br>';//默认不够加右边4600
echo str_pad($str,4,'0',STR_PAD_LEFT),'<br>';//加左边0046
echo str_pad($str,4,'0',STR_PAD_BOTH),'<br>';//加两边0460
?>
字符串大小写转换
<?php
echo strtolower('I LOVE YOU '),'<br>';//i love you
echo strtoupper('i love you');//I LOVE YOU
?>
nl2br():将字符串的换行转成<br>
<!DOCTYPE html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<?php
if(isset($_POST['button'])){
//echo ($_POST['str']);//秦时明月汉时关, 万里长征人未还。
echo nl2br($_POST['str']);//秦时明月汉时关,
//万里长征人未还。
}
?>
<body>
<form method="post" action="">
<textarea name="str" rows="5" cols="20"></textarea>
<input type="submit" name="button" value="提交"/>
</form>
</body>
</html>
htmlspecialchars():将HTML字体转换成实体
<!DOCTYPE html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<?php
if(isset($_POST['button'])){
echo htmlspecialchars($_POST['str']);//<strong>aaaa</strong>
//把提交的代码转换成实体
}
?>
<body>
<form method="post" action="">
<textarea name="str" rows="5" cols="20"></textarea>
<input type="submit" name="button" value="提交"/>
</form>
</body>
</html>
urlencode()、urldecode():url编码和解码
<!DOCTYPE html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<a href="?name=<?php
echo urlencode('无痕');//<a href="?name=%E6%97%A0%E7%97%95">点击</a>
?>">点击</a>
</body>
</html>
array_search():
在数组中搜索给定的值,如果成功返回相应的键
<?php
$array=array('name'=>'无痕','sex'=>'男');
echo array_search('无痕',$array),'<br>';//name
var_dump(array_search('无',$array));//bool(false)
?>
多字节字符串处理函数
PHP默认不支持多字节处理。要开启mb_扩展()
php.ini中开启:
<?php
$str='剑气纵横三万里';
echo mb_strlen($str),'<br>';//7
echo mb_strlen($str,'utf-8'),'<br>';//7
echo mb_strlen($str,'GBK'),'<br>';//11
echo mb_internal_encoding();//默认的字符编码UTF-8
?>
mb_internal_encoding('utf-8');//设置PHP编码
mb_strpos():多字节查询字符位置
<?php
$str='剑气纵横三万里';
echo strpos($str,'纵'),'<br>';//不用多字节 6
echo mb_strpos($str,'纵'); // 用多字节 2
?>
截取子字符串:
<?php
$str='剑气纵横三万里';
echo substr($str,1,2),'<br>';//��失败
echo mb_substr($str,1,2);//气纵
?>
字符串编码函数
liconv(输入的编码,输出的编码,字符串)
<?php
$str='剑气纵横三万里';
echo strlen($str),'<br>';//21
$str_gbk=iconv('utf-8','GBK',$str);//GBK ,将utf-8编码转成gbk格式
echo strlen($str_gbk);//14
?>