PHP语言
    1.在标记语言中,echo “”;常用于输出,
    ;为标记语言分隔符,是对标记语言的分隔,当使用标记语言时,分隔符起到分割指令作用,但如果标记语言结束时没用使用分隔符,会出现错误。
    但是在完整标记语言中,?>可以起到分隔符作用。

    PHP标签的标记语言
    标记语言分为三种

    1. 完整标记语言 <? php?> 完整标记语言可在嵌套语言或单独语言中使用 ,常用于与HTML嵌套。
    2. 简写标记语言 <? php 简写标记语言常用于单独使用,是官方常用标记语言,但当用于HTML语言时,会出现乱码等错误,所以简写标记语言不能嵌套于HTML。只能写在全是php代码中。
    3. 短标记语言 <? 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. 1 and或&& (称并且或逻辑与)<br />表达式:var_dump(true and false);或var_dump(true && false);<br />【注:当and的条件都为真时,返回真;不满足条件都为真时,都返回假】<br />并且的运算符优先级/逻辑短路<br />当有=号、and运算符时,先算=再算and egvar_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 “充值成功”

    1. 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 “

    1. “;
      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 ++;
    }

    1. 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);

    1. 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、局部变量(特定的范围内可以使用)
    【注:在函数语法中定义的变量只能在函数语法中使用,无法被除函数语法外的函数调用】

    1. 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);

    1. 变量函数(回调函数的知识分支)<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’ =>’’,
    ]

    1. 一、数组的层级分类<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循环把里面的内容都拿出来呢

    1. 重建数组索引<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循环可以循环一个指定范围的数字,能够和我们的索引数组的键对应

    1. 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中有两套正则处理函数

    1. 开头 preg_, Prel<br /> 开头 ereg_<br /> preg这一套语法支持更多的正则特性, ereg更好并且语法更强大

    定界符(正则表达式需要使用定界符包起来)
    定界符为/;
    语法:/正则/;
    正则不仅可以为/;
    除了字母、数字、斜线\以外的任何字符都可以作为定界符]

    $preg =”/apple/“; //注:只要是最前面和最后面是一样的就可以作为定界符使用
    $preg =”#apple#”;
    Q & A :定界符作用是:定义正则表达式的界限(哪一段是正则)
    注:尽量不要使用正则的元字符来作为定界符

    1. 原子(是正则表达式最基本的组成单元,而且在每一个模式(规则)中最少要包含一个原子)<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 除了数字、字母、下划线,其他的都匹配

    元字符

    字符修正符