PHP语言
1.在标记语言中,echo “”;常用于输出,
;为标记语言分隔符,是对标记语言的分隔,当使用标记语言时,分隔符起到分割指令作用,但如果标记语言结束时没用使用分隔符,会出现错误。
但是在完整标记语言中,?>可以起到分隔符作用。
PHP标签的标记语言
标记语言分为三种
- 完整标记语言 <? php?> 完整标记语言可在嵌套语言或单独语言中使用 ,常用于与HTML嵌套。
- 简写标记语言 <? php 简写标记语言常用于单独使用,是官方常用标记语言,但当用于HTML语言时,会出现乱码等错误,所以简写标记语言不能嵌套于HTML。只能写在全是php代码中。
- 短标记语言 <? xxxx ?> ;
PHP的注释语言
1.单行注释
//(当换行进行注释时会出现错误);
#(当换行进行注释时会出现错误);
(2)多行注释
/*/ (使用时注释语言不能出现空格( /),也不能与其他链接HTML语言嵌套);
PHP的变量语法
1.变量语法要点
(1) 变量名以$开头,由字母、下划线、数字;
(2)变量名不能以数字开头/变量名添加感叹号等,否则会出现错误;
(3)当使用var_dump()进行调试打印或命名变量名时,变量名的大小写必须一致,否则会出现空值;
(4)重复命名变量名时,程序会以第一个命名的变量名为目标,第二个变量名则会出现变量覆盖情况;
(5)输出语句中,变量名通常从右往左开始;
2.变量格式
$a = 1234;
$(变量名) = “字符串”;
var_dump(); [用来调试打印、数据长度和数据类型以及数据本身 ]
(1)字符串中,中文代表3个字符大小;
PHP的标量
(1)布尔型 bool
true和false
用echo输出bool时,只会输出echo中的内容,而用var_dump输出时,会同时输出它的数据类型
eg:
echo “你好”;输出:你好
$bool var_dump($bool); 输出:bool(true)
但重复定义标量时,程序会以第一个命名的变量名为目标,第二个变量名则会出现标量覆盖情况
(2)整型 int
$int = 100;
$int = -200 【注:即使出现负数,也有标量覆盖的情况出现】
var_dump($int);会输出-200
(3)浮点型 float
(无论正负)
$float = 3.14
var_dump($float);【注:php变量的类型是根据数据来变化的,不需要自己单独设置,称弱类型】
(4)字符串 string(使用单或双引号包起来的文件,就是字符串)
字符串内可以解析变量
如何解析变量,通过{}将变量包括起来解析【注:单引号不可以解析变量,而双引号可以解析变量】
\n换行
\r 回车
\t tab键 制表符
eg:
$hua = ‘’我这里的天气很差,很冷’’;
$dan = ‘今天天气怎么样!{$hua}’;输出今天天气怎么样{$hua}
$shuan = ‘’今天天气怎么样!{$hua}’’;输出今天天气怎么样,我这里的天气很差,很冷
PHP的字符嵌套问题
一、
(1)单引号不可以解析变量、特殊字符,而双引号可以解析变量和特殊字符
(2)单引号和双引号不可以自己嵌套自己,可以互相嵌套,如果非要嵌套,可以使用转义字符转义
$qian = ‘’ ‘’ 【第一个引号表示开始,第二个引号表示结束】 //当在双引号中写双引号会出现语法错误
eg:$qian = ‘’我们想在’’这里写双引号’’; 输出时会出现错误 //由于直接嵌套而产生的语法错误
二、
复合结构类型
(1)数组
array()语法,创建一个空数组、
eg:$var = array();
(2)对象 object(面向对象编程OOP)
$var = new stdclass();
特殊类型
(1)资源resource(php外部文件的引用叫做资源;eg:php外部链接)
$file = fopen(‘1.php,’w’);
$var_dump($file);
(2)空null
$aaaa = 123;
unset($aaaa); [销毁变量]
var_dump($aaaa)
PHP的类型转换
一、强制转换
php弱类型编程语言
根据里面存的值来确定类型
函数:getType()获取一个变量的数据类型
setType()强制修改一个变量的类型
2.
intval()将数据类型转换成int类型
floatval()将数据转换成float类型
strval()将数据转换成string类型
$变量名 = (数据类型)变量名;//便捷的转换方法
二、自动转换
当一个数字与字符串运算时,会自动将字符串转换为数字类型,转换后再进行计算
进行运算时,如果出现字符串时,会提取字符串中最前面的数字,并进行运算
eg:
$str = “字符串”;
$res = 100 + $str ;
int(100)
布尔值
(1)true 1 false 0
(2)转换为布尔值为假会有哪些情况
$var = false;
$var =null;
$var = 0;
$var =0.0;
$var =’’’’;
$var = ‘’ 0’’;
PHP常量
常量(是一个简单值的标识符,当被定义后就无法再修改,也无法取消)
常量的命名规则
不以$开头,剩余与变量的命名规则相同,以字母或下滑线开始,后面跟着字母、数字和下划线
常量的值可以为4大标量(int、float、bool、string、array、resoure、null(值为空值,无意义))
object这个值无法存入
eg:
变量:$bianliang = “我是变量”;
常量:define(名字,值) define(’NAME’,‘’‘’);
PHP的预定义常量
预定义常量
echo PHPos ;//系统名称
PHP_version; // 当前php的版本
_LINE; //在当前文件的第几行 (用于系统的报错)
_FILE; //当前文件的地址
DIR; //当前文件的目录地址
PHP的常量运算符
一、运算符类型
(1)一元运算符:只有一个值进行运算 eg:-10;
(2)二元运算符:+ - * %,必须要有两个值进行运算
(3)三元运算符:?: 一般用来根据一个表达式在另两个表示式中选择一个
二、运算符类别
1、算术运算符【+ - * /;】
运算累加与递减
累加 //++
eg:
$num = 10;
$num ++;
var_dump($num);输出11
$num ++;
var_dump($num);输出12
递减 //—
接
$num —;
var_dump($num);输出11
前置++ 后置++ 区别
执行规律:
eg:
var_dump($++num);输出11
var_dump($num++);输出11
var_dump($num);输出12
前置++:先加加,后输出;
后置++:先输出,再加加;
前置— 后置—区别同上
如果用前/后置运算时
前置时:先++或—,再运算
后置是:先运算,后++或—
eg:
var_dump(10 + $num++);输出20
var_dump(10 + ++$num);输出21
三、字符串运算符 ( 用 . 来拼接字符串)
eg:
$str = ‘’字符串1’’ .‘’字符串2‘’;
var_dump($str);输出string(30)‘’字符串1字符串2‘’
【注:
(1)用 . 将右边的字符串和左边的字符串拼接到一起
(2)是多个 .
(3)代码从左到右
】
四、赋值运算符
+=
eg:
$num = $num + 5 ;输出15
$num += 5;输出20;
-=
$num -= 10 ;输出10
=
$num = 10 ;输出100
/=
$num /= 5 ;输出20
$num = $num /值
%=
$num %= 3; 输出2
$num = $num %值
.=
$var = ‘’valuer‘’; //赋值语句
五、比较运算符
>(大于)
<(小于)
=(大于或等于)
<=(小于或等于)
==(等于)
===(全等于)
eg:var_dump(10 === 10.0); //类型不一致
<>或!=(不等于)
!==(全不等于)
【注:> 运算值最终会表达一个布尔值,成立为真,反之为假】
【注:==当数据一样时,就能够判断成功,不管类型】
【注:===数据和类型要一致,才会返回真】
【注:!=当两边的值不一样的时候返回true】
【注:全不等于是不等于的基础上增加了类型判断】
PHP的逻辑运算符
(1) and或&& (称并且或逻辑与)<br />表达式:var_dump(true and false);或var_dump(true && false);<br />【注:当and的条件都为真时,返回真;不满足条件都为真时,都返回假】<br />并且的运算符优先级/逻辑短路<br />当有=号、and运算符时,先算=再算and eg:var_dump($a = true and $b = true);【注:当第一个条件为false时,表达式不会继续运行】
(2)or 或 || (称或者/逻辑或)(是一个二元运算符)
【注:当表达式中满足只有一个真的条件时,都输出真;无真时输出假】
表达式:var_dump(true or false);或var_dump(true || false);
not或!(称取反或逻辑非)eg: $abc var_dump(! $abc);或var_dump(not $abc)【注:条件为真或假时,输出相反的结果】
xor(称逻辑异或)【当两边表达式只有一个条件为真时才成立】 eg:var_dump(true xor false);【真真=假 | 假真=真 | 假假=假】
其他运算符
三元运算符(?:)
【注:可提供简单的逻辑判断】
表达式:? 真 : 假
eg:$res = $age => 18? ‘是,已满18岁.’ : ‘ 否,离开’ ;
(一个值可以被变量保存,也可以被var_dump和echo输出)
执行运算符(’ ‘)
(区分系统:window 、 linux;当执行完后会返回结果)
【注:当出现乱码时,需通过编译】
eg:$res = ‘ ping baidu.com ‘ 输出乱码
解决方法
$res = iconv( ‘ gbk ‘, ‘ utf-8 ‘ ,$res)
var_dump($res);
错误屏蔽运算符(@)
(屏蔽非致命错误的错误提示消息,但并没有解决非致命错误)
致命错误的判定方法:还能不能继续执行代码(语法错误)
使用方法:直接在错误的代码面前添加@
eg:
var_dump( @ $res);
echo @name;
了解(后面学)
数组下表指定符合(=>)
对象成员访问符(->)
对象类型运算符(instance of)
控制执行if if-else(判断)
(1) if(单向分支)
【当条件成立的时候,先给你赠送网费 ,再继续向下执行条件, 反之如果条件不成立时,跳过赠送网费,继续向下执行】
语法
if(条件表达式){
#(当条件为真时执行)
#(真区间)
}
eg:
$name = ‘ 卓帅 ‘;
$wangfei = 0 ;
if($name = ‘卓帅 ‘){
$wangfei +=5;
}
var_dump($wangfei);
echo “充值成功”
(2) if-else(双向分支)
【注:当条件为真时,则执行真区间,执行完后输出,不会执行假区间,而是直接向后执行 ; 当条件为假时,直接跳过真区间,执行假区间,然后继续向下执行;】
语法
if(条件表达式){
#(真区间)
}else{
#(假区间)
}
eg:
$name = “ 海哥 “ ;
$wangfei = =100 ;
if ($name = ‘ 卓帅 ‘);
echo “ 是卓帅的朋友,送网费. “;
$wangfei += 10;
}else {
echo “是海哥的朋友吗”;
$wangfei -= 100;
echo “赔钱”;
}
echo “充值完成”;
var_dump($wangfei);
计算器
//模拟数据,用户输入
$num1 = 10;
$num2 = 10;
$fu = ‘ - ‘ ;
[第一步判断是什么操作(+ - / %) ]
echo 一次性可以输出多个值,用逗号分开就行了
eg:
if($fu == ‘+’){
echo ‘ 加法 ‘,$num1 += $num2 ;
}else if ($fu == ‘- ‘){
echo ‘ 减法 ‘,$num1 -= $num2 ;
}else if ($fu == ‘ ‘){
echo ‘ 加法 ‘,$num1 *= $num2 ;
}else if ($fu == ‘/‘){
echo ‘ 除法 ‘,$num1 /= $num2 ;{
}else if ($fu == ‘%’){
echo ‘’取余 ‘,$num1 %= $num2 ;
}
// $num1 = $_GET[‘num1’];
// $num2 = $_GET[‘num2’];
// $fu = $_GET[‘fu’];
【注:GET是在url里面传参数(不建议使用提交数据)】
【POST】
【POST与GET是系统超全局变量,内容为数组,必须大写$a、$A】
【POST常用来提交数据】
echo “
“;(在网页上的空格/回车不会丢失)
- “;
var_dump($_POST);
echo “
$num1 = $_POST[‘num1’];
$num2 = $_POST[‘num2’];
$fu = $_POST[‘fu’];
当提交数据的时候,数据为空的解决方法
方法一:当无值时不继续执行
停止脚本运行代码:
exit() //退出
die() //终止
eg:
【取反:原本有值时执行真区间的代码,取反后,是没值时执行真区间】
if(! $num1){
exit(‘’ 请将内容填写完整 ‘’);
}
(有值时不执行任何操作,没值时停止运行代码;如果不取反时,还需多写else内容,然后真区间空着。)
判断数据必须为数字
is_numeric() //判断一个变量是否为数字 ‘1’,’2’ 【如果是数字返回true 反之为false】
is_int
if ( is_numeric ($num1)){
exit(‘’ 只能填写数字 ‘’);
}
if ( is_numeric ($num2)){
exit(‘’ 只能填写数字 ‘’);
}
循环结构
【注:是流程控制中的一种,但不是一个表达式 ;结构是不需要写指令分隔符(;);】
while 循环结构(根据条件表达式来循环)
【注:判断表达式是假为真,如果为真则执行括号里面的代码;当花括号中代码执行完毕时,则重新判断条件表达式是否为真,如果继续为真时,则继续执行,执行到为假停止;】
语法
while(条件表达式){
#(真区间/循环体)
}
eg:
$num = 0; //定义一个变量作为条件使用
【注:但如果不写条件时,会陷入死循环;】
while($num > 100){
echo “ 苹果 “
$num ++;
}
do while循环结构<br />语法<br />do{<br /> #循环体<br />}while(条件表达式);<br />eg:<br />$num = 1;<br />do{<br /> echo " 你好 ";<br /> $num++;<br />}while ($num <= 10);
do while与while的区别:
1.do while先执行循环体再判断条件,不管条件是否成立,都会先执行一遍;
2.while 是先判断条件,再执行循环体;
3.do-while能实现与while一样的功能;
eg:求1+100的累加和1+2+3…..+100
$i = 0 ; //作用:作为条件、作为累加值
$sum = 0; //作用:统计/计算总数
do{
echo $i ;
$sum += $i;
$i++; //条件改变
}while($i <= 100);
for循环(计次循环)<br />语法:<br />for(表达式1;表达式2;表达式3){<br /> #循环体<br />}
表达式1:变量初始化 $num =1 ;
表达式2:条件 $num <= 10;
表达式3:递增或递减 ;
执行顺序:
执行表达式1,先初始化一个变量
再执行表达式2,判断条件是否成立
然后执行循环体,如果条件成立,则执行循环体,反之则立即结束
最后当循环体结束后,然后执行表达式3
eg:
for($i = 0; $i <= 10; $i++; ){
echo $i .”
“;
}
函数
定义:
1/函数(function)指一段完成指定任务的已命名代码块
2/可以接受一些参数来控制代码执行的功能(gif -> png)
3/函数会返回一个值,可能为空
4/带括号的就是函数
函数类型
一、自定义函数()
二、系统提供的函数 eg:var_dump()
函数的优势
/控制程序设计的复杂性
/提供软件的可靠性
/提供软件的开发效率、软件的可维护性和程序的重用性
函数命名规则
/可用字母、下划线好和数字组成
/要以字母或下划线开头,不允许使用数字为开头
/函数名字不区分大小写
/函数无法被重复定义,同名函数只能被输出一个
/函数只有当被调用了才会去执行函数体的代码,否则不会执行
Q&A
1、能否在函数定义前调用函数
在php执行的时候,会先扫描文件内是否有函数,如果有就会先把函数定义到文件的最前面
如何定义函数
语法 :
function 名字(参数1,参数2 …..){
#代码块
#函数体
return-返回值; //可选
}
name() //输出语句
eg:
function name() //name =函数名字
{
echo “想要输出的内容” ;
}
函数的参数
概念
1、形参(形参 = 变量名字)
名字括号中的参数成为形参 eg:function name(参数1(形参).)
作用:接收实参
2、实参
调用函数的额,圈括号中的参数为实参 eg:输出语句中的括号中的值
【注:参数可以传递任意类型的数据;形参中,后面的数不能大于前面的数】
eg:
$bianliang = “外部”;
functino total($startNum , $endNum)
{
var_dump($startNum);
var_dump($endNum);
变量的作用域
1、全局变量(任何位置都可以直接使用)
定义:没有被任何的代码包起来的变量定义为全局变量
【注:强制使用全局变量时,需要先声明变量之后才可以输出全局变量
eg:gobal $a//声明该函数为全局变量,】
2、局部变量(特定的范围内可以使用)
【注:在函数语法中定义的变量只能在函数语法中使用,无法被除函数语法外的函数调用】
return代表了函数的结束,并且return后面的代码不会继续执行<br /> return只能有一个被执行,根据条件的不同来执行<br /> 注:一定要注意逻辑(流程控制)if 真区间和假区间<br />eg:<br />function daifan(){<br /> $fan = '';<br /> $fan .='土豆儿';<br /> $fan .= '豆腐';<br /> $fan .='青菜';<br /> return $fan ;
}
$res = daifan();
var_dump($res);
echo “
“;
function lingshi()
{
$species = ‘’;
$species .= ‘candy
‘;
$species .= ‘potato chips
‘;
$species .= ‘juice
‘;
return $species ;
}
$re = lingshi();
var_dump($re);
静态变量
function demo(){
static $i = 1; //普通变量加上static就是静态变量
echo $i;
$i ++;
}
demo();//第一遍
demo();//第二
demo();//第三
echo “
“;
function lianxi(){
static $a = 2;
echo $a ;
$a ++;
}
lianxi();//1
lianxi();//2
lianxi();//3
lianxi();//4
lianxi();//5
lianxi();//6
echo “
“;
默认参数
默认参数原则:默认参数靠后,必选靠前;参数的传递原则是一一对应的;当不传递实参时,会有一个默认值;
echo “默认参数
“;
function training($start=1,$end=10){
if($end >= $start ){
echo “程序错误”;
}
return $start + $end;
}
echo training(0,0);
函数功能:可传入多个数字,然后去计算这些数的总和
用普通传递参数写法 eg:
function demo1($n1,$n2,$n3,$n4,$n5)
{
return $n1 + $n2 +$n2 + $n3 + $n4 + $n5;
}
$res = demo1(1,20,25,46,5);
echo $res;
echo “
“;
可变个数参数
注:只能在自定义函数中使用的3个辅助函数
1、func_get_args() ;获取传入的所有参数(实参)
2、func_get_arg(索引); 获取指定索引(位置)的参数(实参)
3、func_num_args();获取传入的参数的数量
function demo2()
{
$pa = func_get_args();//获取传入的所有参数(实参)
var_dump($pa);
$pa = func_get_arg(); //获取指定索引(位置)的参数(实参)\
var_dump($pa);
$num = func_num_args();//获取传入的参数的位置
var_dump($num);
}
demo2(1,2,23,4);
echo “
“;
function moni()
{
$na = func_num_args();
var_dump($na);
$num = 0;
for($a = 0;$a < $na ;$i++){
$num += func_get_arg($a);
}
echo “输出:”.$num;
}
moni(1,23,4,52,7,12,3);
引用参数
注意:
1、引用参数的传参必须为变量
2、引用参数的效果和引用变量是一样的;
目的: 方便传参修改数据,而不用重新接受数据
引用参数例子
function demo2(&$a){
echo $a,”
“;
//改变$a的值
$a = “函数内的改变”;
echo $a,”
“;
}
$num = 10;
echo “调用前:”,$num,”
“;
demo2($num);
echo “调用后:”,$num,”
“;
echo “
“;
function demo3(&$x){
$x *= 10;
echo $x;
}
$num2 = 10;
echo “调用前:”,$num2;
echo “
“;
demo3($num2);
echo “
“;
echo “调用后:”,$num2;
匿名函数(就是一个没有名字的函数)
语法: $变量 = function(形参){return ‘值’};【注:结尾需要写分号】
eg:
$fu = function(){
var_dump(‘我是匿名函数,没有名字,我保存在变量里面’);
};
普通函数(有名字)
function demo4()
{
var_dump(‘demo4函数’);
}
demo4();
//返回值能不能用
$fun3 = function(){
//time() 返回时间戳
return time();
};
echo “
“;
$lianxi = function($a,$b){
echo $a + $b;
};
$lianxi(30,50);
回调函数(在一个函数内去调用另一个函数;是基于函数的应用)
功能定义:如何用一个函数去实现多个函数的功能
eg:
function demo6($func)//输出偶数或奇数…..
{
for($s =1;$s <= 10; $s++){
if($func($s)){
echo $s;
}
}
}
$d = function($num3){
if($num3 % 2 == 0){
return true;
}
return false;
};
demo6($d);
变量函数(回调函数的知识分支)<br />function demo5()<br />{<br /> var_dump('这是demo函数');<br />}<br />demo5();//调用函数方法一<br />Q:假设我们将函数的名字保存到变量里面<br />$f = 'demo';<br />$f(); //变量名字+()来调用demo函数的方法二
自定义函数-引入代码文件(可以将另一个代码文件的内容加载到当前文件夹中)
引入文件作用:可以将重复使用的代码放在一个文件中,当需要时,只用引入就可以了
引入函数库(写一个文件来存放在所编写的所有函数)
include()[引入文件] 、require()[引入文件]
引入文件-路径
相对路径:相对当前目录去引入文件,把当前文件夹作为参照物
语法: ./(当前目录) ../(上一级目录) ./a.php(当前目录下面的a.php文件)
[适合被重复引入的代码文件]
include(‘./3.20.php’)
include(); //Q & A :(1)文件不存在时,引入会导致报错,但后面的代码会继续运行
require();// Q & A :当文件不存在时,引入会导致致命错误,并且后面的代码也不会继续运行
绝对路径:根据系统的根目录来寻找文件
语法: D:\phpstudy_pro\WWW\zuoye\3.20.php
once的作用就是使文件只能被引入一次
[只适合被允许引入一次的代码/函数]
include_once(); //会使文件只能被引入一次
require_once(); //同上
递归函数
eg:
function digui($num);
{
echo $num ,”
“;
if($num > 0){
digui2($num - 1);
}
echo $num,”
“;
}
digui(3);
function digui2($num);
{
echo $num,”
“;
if($num > 0){
}
echo $num,”
“;
数组
(把若干个变量按照顺序组合起来的集合叫做数组;变量只能存放一个内容;)
定义:数据类型叫做 array;
$arr = array();
定义方式
(1) 直接赋值的方式来声明数据
$变量名[key] = value eg:$arr1[‘name’] = value
直接赋值
$arr2[‘name’] =’大哥’;//直接给一个不存在的变量进行数组赋值,会自动创建
$arr2[0] =’nihao’;
(2) 使用array()语言结构创建一个空数组’
使用array();来创建[只有在每个数据之间加上逗号,就可以写多个值]
$arr3 = array(
‘name’ => ‘大哥’,
‘age’ =>’18’,
‘like’ =>’women’,
);
(3) 使用[]也可以创建一个新数组
多维数组的声明
一、数组的层级分类
一维数组(一层)
二维数组(数组内容还是数组)
多维数组(嵌套层级较多时)
二、数组的分类
索引数组
key为数字的(一个数字对应一个值)
关联数组
key为字符串的(一个名字对应一个值)
混合数组
key既有数字也有字符串
[注:数组的内容是以键值对的方式存储的 key => value]
使用[]创建 不写name、age…会直接变成索引数字,下表按顺序从0开始
$arr4 =[
‘name’ => ‘大哥’,
‘age’ =>’18’,
‘like’ =>’women’,
];
var_dump($arr4);
多维数组的声明方式(多维数组就是当嵌套的层级大于3级或更多时)
一维数组
$arrs1 = [
‘name’ => ‘大哥’,
‘age’ =>’18’,
‘like’ =>’’,
]
一、数组的层级分类<br /> 一维数组(一层)<br /> 二维数组(数组内容还是数组)<br /> 多维数组(嵌套层级较多时)<br /> 二、数组的分类<br /> 索引数组<br /> key为数字的(一个数字对应一个值)<br /> 关联数组<br /> key为字符串的(一个名字对应一个值)<br /> 混合数组<br /> key既有数字也有字符串<br /> 数组的修改<br /> 语法$_POST<br />$arrx1 = [<br /> 'name'=> '大爷',<br /> 'age' => '18',<br /> 'like' =>'吃'<br />];<br />var_dump($arrx1);<br />$arrx1['like'] ='睡'; //修改<br />数组的新增 - 索引数组<br />$arrx2 = [<br /> 10, //0<br /> 20, //1<br /> 30, //2<br /> 40, //3<br />];<br />var_dump($arrx2);<br />$arrx2[20] = '这是我新增的数组';//指定key新增<br />$arrx3[] ='这是新增的内容,key由系统自动生成'; //自动计算key新增<br />计算方式:是在当前数据的最大key值加上1作为当前数据的key
数组的新增 - 关联数组
$arra = [
‘name’ => ‘大姐’,
‘age’ => ‘31’,
];
$arra[‘age’] = 18; //指定key新增
var_dump($arra);
$arra[] = ‘可不可以’ //自动新增 ;与上面的索引规则相同
数组的新增 - 删除数组中的数据
$shanchu = [
‘name’ => ‘大哥’,
‘age’ => ‘18’,
‘like’ => ‘no’,
];
unset($shanchu[‘name’]);//删除
Q & A :当用for循环把里面的内容都拿出来呢
重建数组索引<br />$变量 = array_values(数组);获取数组的值,然后组成一个新的数组<br />$shanchu = array_values($shanchu);<br />!!!数组内容可以重复,key不能重复,一个key只能呢对应一个值 ;如果重复定义同样的key时,后面的key会覆盖前面的key,索引数组也一样
数组下标的强制转换
(1) 如果是16进制数,会被自动转换为10进制作为下标;
(2) 所有合法整型表达方式都会转换为10进制,当超出进制的取值则会报错;
(3) 浮动数的小数部分会被删除,然后直接使用删除后的整数作为键
(4) 布尔值会转换为整型然后作为键
(5)null作为键则表达一个空字符串
(6)数组和对象不能作为数组的键名,使用会报错
(7)字符串
$arr = [
123 => ‘10进制下标’,
0xFF => ‘16进制写法’,
0b111 => ‘8进制写法’,
8.7 => ‘浮点数如何处理’, //浮点数
true =>’是true’, //布尔值
false => ‘是false’
null => ‘是null’,
// $a => ‘是数组’ 使用数组作为键名
];
for循环遍历数组
[注:只能循环索引数字,而且必须是连续性的数组]
$arr = array(
10,
20,
30,
40,
50,
60,
70,
80,
90,
);
var_dump($arr);
echo “
“;
echo $arr[0],”
“, //手动输出
for($i = 0;$i < 9;$i++){ //使用for循环输出数组中的内容
echo $arr[$i]; //[]中可以写变量,括号中可以写表达式
}
var_dump($arr);
//注:获取数组内容:$变量名[索引]
由于索引是数字;此时for循环可以循环一个指定范围的数字,能够和我们的索引数组的键对应
foreach遍历<br />foreach($数组 as $值变量){<br /> echo "输出" ;<br />} //foreach<br />语法 [注:$值变量等于遍历出来的值;foreach也可以遍历(循环) 关联数组;foreach不仅可以获取值时,也可以获取键]
foreach($arr1 as $key => $d){
echo $arr ,’=>’ $d ‘
‘;
}
Q & A :当索引不连续/被删除时,后面的代码会继续运行
$a = array(1,12,22,32); //索引数组
foreach($a as $v){
echo “当前遍历到的值是\$a : $v.
“;
}
$arr1 =[ //关联数组
‘name’ => ‘大哥’ ,
‘age’ => ‘18’,
‘like’ => ‘吃’,
];
foreach($arr1 as $s){
echo “$s”;
}
数组指针函数遍历
next($数组);将指针向后移动一个位置(下一个值)
prev($数组);将指针向前移动一个位置(上一个值)
end($数组);移动到最后一个位置(最后一个值)
reset($数组);移动到第一个位置(第一个值)
key($数组);获取当前指针指向的元素的下标
current($数组);获取当前指针指向元素的值
$arr =[
10,
‘name’ => ‘大哥’,
10 => ‘是10’,
‘name2’ => ‘大姐’,
‘我是最后一个值’,
];
var_dump($arr);
$key = key($arr); //获取键
$value =current($arr);//获取值
注:key 与 current 执行结果会随着指针改变而改变
var_dump($key);
var_dump($value);
next($arr); //指向下一个值
next($arr);
next($arr);//可重复移动
注:当next移动成功后会返回移动后元素的值,如果移出数组范围则会返回false,并且通过上移也无法获取值
$key = key($arr);
$value = current($arr);
var_dump($key);
var_dump($value);
$res =prev($arr) ; //把数组的指针向上移动一个位置;移出范围时效果同上
reset($arr); //重置数组指针
end($arr); //将指针移动到最后一个值
数组的排序函数
[注:如果没有强调只针对特定内容排序的话,统一都是指针数组的值排序]
sort(数组)对数组排序(升序)
rsort(数组) 对数组逆向排序(降序)
ksort(数组)对数组的键排序(升序)
krsort(数组) 对数组的键逆向排序(降序)
asort(数组)对数组进行排序并且保持索引
arsort(数组)对数组进行逆向排序并且保持索引
拆分、合并、分解、结合数组
“自然算法”根据人为的日常排序方式来排序
natsort(数组) 用 “用自然排序”算法排序
narcasesort(数组) 用”自然排序”算法排序,但不区分大小写
sort(数组)对数组排序(升序);rsort(数组) 对数组逆向排序(降序)
$arr = [
1,
20,
60,
34,
50,
90,
70,
100,
];
//降序还是升序,都是在原数组上改变
//排序函数都是在原数组上修改
$res = sort($arr); //升序
var_dump($res);
var_dump($arr);
$res =rsort($arr); //降序
var_dump($res);
var_dump($arr);
ksort(数组)对数组的键排序(升序);krsort(数组) 对数组的键逆向排序(降序)
$arr2 = [
100 => ‘a’,
20 => ‘b’,
60 => ‘c’,
40 => ‘d’,
70 => ‘e’,
80 =>’f’,
200 => ‘g’,
];
var_dump($arr2);
ksort($arr2); //键升序
var_dump($arr2);
krsort($arr2); //键降序
var_dump($arr2);
asort(数组)对数组进行排序并且保持索引; arsort(数组)对数组进行逆向排序并且保持索引
$arr3 =[
2,
7,
4,
5,
1,
9,
];
asort($arr3);//排序并且保持索引
var_dump($arr3);
arsort($arr3);//逆向排序并且保持索引
自然排序算法
//自然算法与普通算法区别:普通函数是一个字符一个字符的比较;自然函数会按照人为的理解方式来排序;
natsort();
$arr4 =[
‘img1.jpg’,
‘img10.jpg’,
‘img2,jpg’,
];
natsort($arr4);
var_dump($arr4);
拆分、合并、分解、结合数组
(1) array_slice();//从数组取出一段值
$srr =[
1,
4,
6,
7,
8,
9,
];
$ss = array_slice($srr, 2);
var_dump($ss);
//第三个参数是一个长度(可选填)
//如果填写则按照填写的数量获取,如果不写则直接获取到末尾 eg:array_slice($srr , 1 ,3);
(2)array_splice();//把数组的一部分去除,同时支持替换内容
$srr2 =[
1,
4,
6,
7,
8,
9,
];
//第三个参数是一个长度(同上),如果第三个参数为负数则从末尾开始算起
//如果替换则从当前位置开始到结束的所有内容 count(数组)
//填写则按照填写的数量删除,如果不写则直接删除到末尾
//第四个参数是要被替换的数组, //eg:$ss1 =array_splice($ss2,1,3,[1,2,456,72,21,])
$ss1 = array_splice($srr2,1);
var_dump($ss1);
(3)array_combine(); //创建一个新数组用一个数组的值作为键名,另一个数组的值作为值
$key =[
‘name’,
‘age’,
‘like’,
];
$value =[
‘大哥’
‘16’,
‘睡觉’,
];
$srr3 =array_combine($key,$value);
var_dump($srr3);
array_merge(); //合并数组,两个或多个
$merge = array_merge($ss ,$ss3,);
var_dump($merge);
//注:当键名相同时,最后定义的键名的值会覆盖前面键名的值
(4)array_intersect(); //计算数组之间的交集[注:交集的概念与数学上的交集相同]
(5)array_diff(); //计算数组之间的差集[注:差集的概念为数学上的并集相同]
$intersect =[
1,
4,
3,
7,
8,
10,
];
$es = array_intersect($intersect,$intersect2);
var_dump($es);
$intersect2 =[
1,
5,
2,
3,
];
$es2 = array_diff($intersect,$intersect2);
var_dump($es2);
其他函数
(1)array_rand(); //随机从数组中取出一个值
$rand =[
1,
2,
3,
4,
5,
6,
7,
8,
];
$rse = array_rand($rand);
var_dump($rand[$rse]);
//随机从数组中取出一个键(值)
(2)shuffle();//将数组打乱
(3)array_sum();// 将数组内的值全部相加
$rese =array_sum($rand);
var_dump($rese);
(4)range(); //生成指定范围的数组
$res1 =range($0.9);
var_dump($res1);
(5)array_fill(); //生成固定内容的数组[第一个参数为开始的索引;第二个参数为表示的参数;第三个为表示的内容]
$res3 = array_fill(0,10,’666’);
var_dump($res3);
数组与数据结构相关的函数
(1) array_pop(); //获取数组最后一个值并且删除
$arr = [
10,
20,
30,
40,
50,
60,
70,
80,
];
var_dump($arr);
$res = array_pop($arr);//返回值就是删除前最后一个数据
var_dump($res);
var_dump($arr);
(2) array_push(); //在数组最后加入一个或者多个值
$arr1 = [
10,
20,
30,
40,
50,
60,
70,
80,
];
$res1 =array_push($arr1 ,90,100,210); //返回时添加数据后数组的长度
var_dump($res1);
var_dump($arr1);
(3) array_shift(); //获取数组最前面的值并且删除
$arr2 = [
10,
20,
30,
40,
50,
60,
70,
80,
];
$res2 = array_shift($arr2);
var_dump($res2);
var_dump($arr2);
(4) array_unshift(); //在数组的最前加入一个或者多个值
$arr3 = [
10,
20,
30,
40,
50,
60,
70,
80,
];
$res3 = array_unshift($arr3,10,221,331,421,512);
var_dump($res3);
var_dump($arr3);
字符串的处理方式
(1)字符串解析变量(只有双引号才能解析变量)
$name =’大哥’;
$s = “直接写$name”;//可以输出
$s = “直接写$name 别的”; //不添加空格会报错,但添加空格输出后会出现空格现象
$s = “直接写{$name}别的 “; //解决空格现象
(2)字符串解析数组
$srr = [
‘name’ => ‘dage’,
];
$ss = “解析数组变量:$s[name] “;
$ss = “解析数组变量:{$s[‘name’]”;
(3)字符串解析对象变量(对象其实就是 变量 + 函数的集合)
$对象名字 -> 变量名 (和普通变量一样使用就可以了)
define(‘NAME’,’大哥’);
$r = “常量:{NAME}”; //不能解析
$r = “常量:”. NAME;
echo $s;
//字符串当成是数组的形式来获取数据
$t = “dage”;
//建议使用花括号的方式,用[]容易混淆
echo $t[0]; //a
echo $t[1]; //b
echo $t{0}; //a
echo $t{1}; //b
//设置一个字符,多余的字符会被删除
$str {8} =”6”;
$str{8} =”777”;
echo $str;
常用的字符串输出函数
(1)
echo(); //输出字符串
echo(“echo 字符串”);
(2)
print();//输出字符串
print(“print 字符串”);
(3)
die(); //输出字符串,并且退出代码运行
die(“die 字符串”);
(4)
printf(); //输出格式后的字符串
printf(“%s的天气%s”,”广州”,”不好”);
格式占位符(有格式转换的作用)
%s ;
$b (二进制数字) ;
%c(ascii字符);
%d(十进制数字);
%f(浮点数);
%x(16进制数);\
第一个参数:格式字符串
[注:直接输出到网页]
(5)
sprintf(); //把格式化字符串return(返回格式化字符串,由程序员自己输出)
$res4 = sprintf(“%s的天气%s”,”广州”,”不好”);
echo $res4;
字符串切割与拼接
(1) explode(标识符,字符串); //使用一个标识符来将字符串切割为数组
$str = ‘你好##时间##多少啊##’
$res = explode(‘##’,$str);
var_dump($str);
(2) implode(标识符,数组); //使用一个标识符来将数组拼接为字符串,同时标识符可以为空
$res1 = implode(‘@@’,$res);
var_dump($res1);
$res1 = implode(‘’,$res);
var_dump($res1);
(3) substr(字符串,开始[,长度]); //取出字符串中某一段文字[注:不能取中文]
$st = “my name is dage”;
$res = substr($st,10,4);
var_dump($res);
//当长度不写时,自动截取到末尾
$res = substr($st,11 );
var_dump($res);
字符串查找与替换
(1) str_replace(搜索值,替换值,字符串); //替换指定内容[注:区分大小写]
$fan = str_replace(‘aa’,’bb’,’字符串 aa 随便写’);
var_dump($fan);
// str_ireplace(); 不区分大小写
(2) substr_count(字符串,搜索的值); //统计字符串在另一个字符串出现的次数
$num = substr_count(“aabbaa”,”aa”);
var_dump($num);
(3) substr_replace(字符串,替换的内容,开始位置,长度); //替换一段固定位置的内容[长度可以写/不写;不写长度自动删除到末尾]
$es =substr_replace(“my name is dage”,”wen”,11,4);
var_dump($es);
(4) strpos(字符串,搜索值); //寻找一个字符在字符串中最先出现的位置
$resInt = strpos(“bbbbbbbabbbbbabbbb”,”a”);
var_dump($resInt);
(5) strrpos(); //寻找一个字符在字符串中最后出现的位置
$resInt = strrpos(“bbbbbbbabbbbbabbbb”,”a”);
var_dump($resInt);
正则基本语法
正则表达式
(1)用于描述字符排序和匹配模式的语法规则
(2)主要用于字符串的分割、匹配、查找以及替换操作
(3)正则表达式一般是由正规字符和一些符号(* . +)联合构成一个文本模式(规则)
(4)在php中正则表达式作用
匹配,常用于从字符串中解析并获取信息
用新文本代替匹配文本
将一个字符串拆分为一组更小的信息块(切割)
在php中有两套正则处理函数
开头 preg_, Prel<br /> 开头 ereg_<br /> preg这一套语法支持更多的正则特性, 比ereg更好并且语法更强大
定界符(正则表达式需要使用定界符包起来)
定界符为/;
语法:/正则/;
正则不仅可以为/;
除了字母、数字、斜线\以外的任何字符都可以作为定界符]
$preg =”/apple/“; //注:只要是最前面和最后面是一样的就可以作为定界符使用
$preg =”#apple#”;
Q & A :定界符作用是:定义正则表达式的界限(哪一段是正则)
注:尽量不要使用正则的元字符来作为定界符
原子(是正则表达式最基本的组成单元,而且在每一个模式(规则)中最少要包含一个原子)<br />原子是由那些未显示指定为元字符的打印和非打印字符组成<br />具体分为5类:a - z; A - Z ;0 - 9;<br /> (1) 一些特殊字符和转义后的元字符可以作为原子:所有的符号,如果是元字符的话请使用 \ 转义:\* \.<br /> (2) 一些非打印字符作为原子:\n \r \t \v<br /> (3) 使用 "通用字符类型" 作为原子:\d \D \w \W \s \S<br /> (4) 自定义原子表([])作为原子:<br /> \d 匹配任意一个十进制数0-9<br /> \D 除了0-9,其他的任何字符都匹配<br /> \s 匹配任意一个空白符(非打印字符)\f \n \r \t \v<br /> \S 除了空白符,其他的任何字符都匹配<br /> \w 匹配任意一个数字、字母、下划线<br /> \W 除了数字、字母、下划线,其他的都匹配
元字符
字符修正符
