PHP基础(第六话)

常用函数

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,'&nbsp;';//无痕 男 24

	});
	echo '<hr>';
	array_walk($person,function ($val,$key) {
		echo $key,'-',$val,'&nbsp&nbsp';//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']);//&lt;strong&gt;aaaa&lt;/strong&gt;
		//把提交的代码转换成实体
	}
	?>

<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
?>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值