zoukankan      html  css  js  c++  java
  • PHP从入门到精通(三)

    PHP数组的分类

    按照下标的不同,PHP数组分为关联数组与索引数组:

    索引数组:下标从0开始,依次增长;
    关联数组: 下标为字符串格式,每个下标字符串与数组的值一一关联对应。(有点像对象的键值对)

    关于关联数组和索引数组:

    1、数组中,可以同时存在索引数组与关联数组;
    array(1,2,3,"one"=>4);

    2、数组中,所有的索引数组,如果不加指定,会去掉关联项,默认增长(即,关联数组不占索引位);
    array(1,2,"one"=>3,4,5); //1,2,4,5的索引-->0/1/2/3

    3、如果,关联数组的key,是纯十进制整数字符串,则会将此数字转为索引数组的索引值;("10.0"/"08"等格式,仍然是关联数组,不转为索引)
    array(1,2,"one"=>3,"9"=>4,"010"=>5);// 1,2,4的索引-->0/1/9

    4、 手动指定关联数组的key、索引数组的下标,如果与前面已有的key或下标重复,则后制定的值会覆盖之前的值;
    array(1,"one"=>2,0=>5,"one"=>6); --> 打印数组:0=>5,"one"=>6

    5、如果手动指定索引数组下标,则后续自增长下标 ,会按照之前下标最大值,依次增长;
    array(1,2,7=>3,4);--> 1,2,3,4的下标-->0/1/7/8

    实例展示:

    复制代码

    $arr1 = array(1,2,3,4,5,6,7); // 索引数组
    var_dump($arr1);

    $arr2 = array("one"=>1,"two"=>2,"three"=>3); // 关联数组
    var_dump($arr2);

    $arr3 = array(1,"one"=>2,3,5=>4,5,6,"10.0"=>7,"08"=>8,"08"=>10,"haha"=>9);
    var_dump($arr3);

    复制代码
    数组的声明方式

    1、直接赋值声明:

    复制代码
     $arr[] = 1;
      $arr[] = 1;
      $arr[8] = 1;
      $arr[] = 1;
      $arr[4] = 1;
      $arr[] = 1;
      var_dump($arr);
    复制代码

    2、[]字面量声明(PHP5.4版本之后能用)

    $arr = [1,2,3,4,"one"=>54,6];
    var_dump($arr);

    3、 Array()声明 木有new关键字

    $arr = array(1,2,3,4,5);
    var_dump($arr);
    数组元素的读取

    PHP中,数组支持[]和{}读取下标。

    复制代码

    $arr = [1,2,3,"one"=>4];
    echo $arr[0];
    echo $arr["one"];
    echo $arr{"one"};
    echo $arr{0};

    复制代码
    多维数组

    数组的一个值,依然是一个数组,我们称这种数组为多维数组;


    多维数组,不要求所有的项都是数组,可以是数组与普通值的混合;
    多维数组,也不要求每个子数组的个数限制,可以是任意的长度;

    使用多维数组一定要注意,数组中分隔用逗号!!
    原则上,多维数组一般不超过3层使用。

    实例展示:

    复制代码

    $h51701 = array(
    "group1"=>array(
    array("name"=>"张三","age"=>14,"sex"=>"男"),
    array("name"=>"张三","age"=>14),
    array("name"=>"张三"),
    "groupName"=>"一组"
    ),
    "group2"=>array(
    array("name"=>"张三","age"=>14,"sex"=>"男"),
    array("name"=>"张三","age"=>14,"sex"=>"男"),
    array("name"=>"张三","age"=>14,"sex"=>"男")
    ),
    "group3"=>array(
    array("name"=>"张三","age"=>14,"sex"=>"男"),
    array("name"=>"张三","age"=>14,"sex"=>"男"),
    array("name"=>"张三","age"=>14,"sex"=>"男")
    )
    );
    var_dump($h51701);

     
    复制代码
    数组的遍历

    1、使用for循环遍历数组
    conut($arr);用于统计数组元素的个数。

    for循环只能用于遍历,纯索引数组!!!!
    如果存在关联数组,count统计时会统计两种数组的总个数,使用for循环遍历混合数组,导致数组越界!!

    复制代码

    $arr = array(1,2,3,5,6,7);
    $num = count($arr);//count最好放到for外面,可以让函数只执行一次
    echo "数组元素的个数{$num}<br/>";
    for($i=0;$i<$num;$i++){
    echo "{$i}==>{$arr[$i]}<br/>";
    }

    复制代码

    2、forEach循环遍历数组
    foreach可以遍历任何类型的数组!!!
    写法如下:

    复制代码
    $arr = array(1,2,3,"one"=>4,5,6,7);
        foreach($arr as $item){
            echo "{$item}<br>";
        }
        foreach($arr as $key => $item){
            echo "{$key}==>{$item}<br>";
        }
    复制代码

    3、使用list()、each()、while()遍历数组

    list():用于将数组的每一个值,赋值给list函数的每一个参数。(list函数的参数,必须小于等于数组的元素个数);

    list($a,$b,$c)=[1,2,3];-->$a=1; $b=2; $c=3;

    注意:① list()在解析数组时,只解析索引数组;
    ② list可以通过空参数,选择性的解析数组的值;

    list($a,,$b)=[1,2,3];-->$a=1; $b=3;

    each():用于返回数组当前指针所在位的键值对!并将指针后移一位;
    返回值:如果指针有下一位,返回一个数组。包含一个索引数组(0-键,1-值)和一个关联数组("key"-键,"value"-值);
    如果指针没有下一位,返回false;

    使用list()/each()/while()配合遍历数组:

    while(list($key,$value) = each($arr)){
             echo "{$key}-->{$value}<br>";     
          }
          reset($arr);

    !!!!数组使用each()遍历完一遍后,指针使用处于最后一位的下一位;即再用each(),始终返回false;
    如果还需使用,需用reset($arr);函数,重置数组指针;

    4、 使用数组指针遍历数组
    ① next:将数组指针,后移一位。并返回后一位的值;没有返回false
    ② prev:将数组指针,前移一位。并返回前一位的值;没有返回false
    ③ end: 将数组指针,移至最后一位,返回最后一位的值;空数组返回false
    ④ reset:将数组指针,恢复到第一位。并返回第一位的值;空数组返回false
    ⑤ key: 返回当前指针所在位的键;超出返回null。
    ⑥ current:返回当前指针所在位的值;超出返回false。

    复制代码
    $arr = [1,2,3,""=>false,"one"=>5];
         while(true){
             echo key($arr);
             echo "--";
             echo current($arr);
            echo "<br>";
            //key===null用于排除数组包含空值,导致next返回值为false的情况;
            if(!next($arr)&&key($arr)===null){
                break;
            }
         }
         reset($arr);
         do{
             echo key($arr);
             echo "--";
             echo current($arr);
            echo "<br>";
         }while(next($arr));
         reset($arr);
    复制代码
    超全局数组

    超全局数组、超全局变量、预定义数组、预定义变量说的都是他。

    PHP给我IM恩提供了一组包含强大功能的超全局数组,可以在任何地方、任何作用域不需要声明,直接使用!!不受任何作用域限制。
    1、 服务器变量: $_SERVER;
    $_SERVER返回包含浏览器头信息、路径、脚本以及服务器系统等各种信息;

    如图所示:


    2、 环境变量:$_ENV;
    $_ENV将系统环境变量,转变为PHP中的数组,就是$_ENV;
    PHP默认是关闭此全局数组的。如果需要使用,需修改php.ini文件中的variables_order="GPSC",改为variables_order="EGPSC"即可使用,否则为空;
    但是,修改后会造成系统性能损失,官方并不推荐使用。
    可以使用getenv()函数取代全局变量,取出每个系统环境变量的值。

    phpinfo():函数,包含PHP的各种信息,其中environment模块就是系统环境变量,可以使用getevn()取出其中的每一个值;

    3、 HTTP GET变量:$_GET;
    $_GET获取前台通过get方式提交的数据;


    4、 HHTP POST变量:$_POST;
    $_POST获取前台通过post方式提交的数据;
    5、 request变量:$_REQUEST;
    默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。 
    由于$_REQUEST同时包含get和post,可能导致get和post的键冲突,并且效率也不高,所有,并不使用request。
    6、 HTTP文件上传变量:$_FILES;
    通过 HTTP POST 方式上传到当前脚本的项目的数组。 (后续细讲)
    7、 HTTP Cookies:$_COOKIE;
    获取当前页面cookie信息;(可以手动setcookie("",""),可赋值);
    8、 Session变量:$_SESSION;
    $_SESSION:取到保存在session中的信息。
    !!!!!!$_SESSION很常用,非常重要!!!!!!!!
    9、 Global变量:$GLOBALS;
    $GLOBALS包含了上述所有全局数组,可以通过$GLOBALS["$_SERVER"]取到$_SERVER;

    还可以通过给$GLOBALS数组追加下标,创建全局变量,可以在函数里函数外随意访问:$GLOBALS["name"]="zhangsan";

    实例展示:

    复制代码

    //1、服务器变量:$_SERVER;
    //var_dump($_SERVER);
    //var_dump($_SERVER['HTTP_USER_AGENT']);

    //var_dump($_ENV);
    //phpinfo();

    //var_dump($_GET);
    if(isset($_GET["submit"])){
    if($_GET["username"]==$_GET["pwd"]){echo "GET登陆成功";}
    else{echo "GET登陆失败";}
    }
    if(isset($_POST["submit"])){
    if($_POST["username"]==$_POST["pwd"]){echo "POST登陆成功";}
    else{echo "POST登陆失败";}
    }

    //var_dump($_REQUEST);

    //var_dump($_COOKIE);

    //session_start();
    //$_SESSION["haha"]="hehe";
    //var_dump($_SESSION);

    //var_dump($GLOBALS["$_SERVER"]);

    var_dump($http_response_header);
    ?>
    <form action="" method="post" autocomplete="on">
    用户名:
    <input type="text" name="username" /><br />
    密&nbsp;码:
    <input type="password" name="pwd"/><br />
    <input type="submit" name="submit" value="登录" />
    </form>

    复制代码
  • 相关阅读:
    oracle中查询表是否存在
    asp.net webform/mvc导出Excel通用代码
    分享给大家一个500G.Net ftp资料库
    C# 使用TopShelf实现Windows服务部署
    C#基于Quartz.NET实现任务调度并部署Windows服务
    附加进程找不到w3wp.exe进程解决方案
    在vs2015中使用附加进程的方式调试IIS中的页面
    删除datatable的行后,出现“不能通过已删除的行访问该行的信息”的错误,即DeletedRowInaccessibleException
    C# FTP操作类
    C# vb .net实现发光效果
  • 原文地址:https://www.cnblogs.com/cangqinglang/p/8810554.html
Copyright © 2011-2022 走看看