• 数组初始


    空数组

        $arr=array();
        var_dump($arr);

    gettype():得到变量的类型

        echo gettype($arr);//array(0) {}

    通过is_array():检测变量是否为数组

        var_dump(is_array($arr));//arraybool(true)

    如果数组下标重复,后面的覆盖前面的值

        $arr=array(
          'a',
          0=>'b'
        );
        var_dump($arr);
        //array(1) {
        //[0]=>
        //  string(1) "b"
        //}

    如果新添加元素没有指定下标,它的下标为已有下标最大值加1(已有下标不全为负数)

        $arr=array(
        'a','b','c',
          5=>'d',
          19=>'e',
          'f'
        );
        //var_dump($arr);
        //array(6) {
        //    [0]=>
        //  string(1) "a"
        //    [1]=>
        //  string(1) "b"
        //    [2]=>
        //  string(1) "c"
        //    [5]=>
        //  string(1) "d"
        //    [19]=>
        //  string(1) "e"
        //    [20]=>
        //  string(1) "f"
        //}

    如果已有下标都为负数,那么新添加元素的下标从0开始

        $arr=array(
          -12=>'a',
          -43=>'b',
          'c'
        );
        var_dump($arr);
        //array(3) {
        //    [-12]=>
        //  string(1) "a"
        //    [-43]=>
        //  string(1) "b"
        //    [0]=>
        //  string(1) "c"
        //}

    动态创建下标连续的索引数组

        $arr1[]=12;
        $arr1[]=45678.9;
        $arr1[]=true;
        print_r($arr1);
        //Array
        //(
        //    [0] => 12
        //    [1] => 45678.9
        //    [2] => 1
        //)

    快速创建下标连续的索引数组

        $arr=range(1,10);
        print_r($arr);
        //Array
        //(
        //    [0] => 1
        //    [1] => 2
        //    [2] => 3
        //    [3] => 4
        //    [4] => 5
        //    [5] => 6
        //    [6] => 7
        //    [7] => 8
        //    [8] => 9
        //    [9] => 10
        //)

    手动指定步长的数组

        $arr=range(1,10,2);
        print_r($arr);
        //Array
        //(
        //    [0] => 1
        //    [1] => 3
        //    [2] => 5
        //    [3] => 7
        //    [4] => 9
        //)
    
        $arr=range('a','z');//97~122
        print_r($arr);

    通过compact创建数组的时候,只能写已经存在的变量的名称,不需要加$

        $a=12;
        $b=false;
        $c=null;
        $userInfo3=compact('a','b','c');
        print_r($userInfo3);
        //Array
        //(
        //    [a] => 12
        //    [b] => 
        //    [c] => 
        //)

    定义常量数组
    const在5.6之后可以定义常量

        const ARR2=[
          'a'=>'aa',
          'b'=>'bb'
        ];
        print_r(ARR2);

    通过define()定义常量数组

        define('CUSTOM_UPLOAD_ERRORS',[
          'ext_error'=>'上传文件扩展名不符合规范',
          'maxsize_error'=>'上传文件大小不符合规范'
        ]);
        print_r(CUSTOM_UPLOAD_ERRORS);
        echo CUSTOM_UPLOAD_ERRORS['ext_error'];

    删除指定元素unset

        $arr=['a','b','c'];
        unset($arr[0]);
        print_r($arr);
        //Array
        //(
        //    [1] => b
        //    [2] => c
        //)

    临时转换成数组

        $var=null;//null转化成空数组
        $res=(array)$var;
        var_dump($res);
        array(0) {
        }

    永久转换成数组,settype($var,$type)

        $var=123;
        settype($var,'array');
        var_dump($var);
        array(1) {
            [0]=>
          int(123)
        }

    合并数组
    如果数组键名相同,只会使用左边数组元素的值

        $arr1=['a','b','c'];
        $arr2=['d','e','f'];
        $newArr=$arr1+$arr2;
        print_r($newArr);
        //Array
        //(
        //    [0] => a
        //    [1] => b
        //[2] => c
        //)

    == 比较数组的键名和键值是否相同,如果相同返回true,否则返回false
    === 既要比较键名和键值是否相同,而且顺序也要相同

        $a=[
          3=>'a',
          '5'=>true
        ];
        $b=[
          5=>1,
          '3'=>'a'
        ];
        $c=[
          '3'=>'a',
          '5'=>1
        ];
        var_dump($a==$b,$a===$b,$a==$c,$a===$c);//true false true false

    数组运用

    通过foreach遍历数组

         $arr=[
           5=>'a',
           12=>'b',
           -123=>'c',
           34=>'d'
         ];
         foreach($arr as $v){
           echo $v,"
    ";//a b c d
         }
         foreach($arr as $k=>$v){
           echo $k,'--',$v,"
    ";
        //     5--a
        //     12--b
        //     -123--c
        //     34--d
         }

    可以通过:和endforeach代替{}

        foreach($arr as $val):
          echo $val;
        endforeach;

    foreach不再改变内部数组指针

        $arr=[0,1,2];
        foreach($arr as &$val){
          var_dump(current($arr));
        }

    foreach 通过值遍历时,操作的值为数组的副本

        $arr=[0,1,2];
        $ref=&$arr;
        //老版本会跳过1
        foreach($arr as $val){
          echo $val,'<br/>';//0 1 2
          unset($arr[1]);
        }
        var_dump($arr,$ref);
        //array(2) {
        //    [0]=>
        //  int(0)
        //  [2]=>
        //  int(2)
        //}
        //array(2) {
        //    [0]=>
        //  int(0)
        //  [2]=>
        //  int(2)
        //}

    foreach通过引用遍历时,有更好的迭代特性
    按照引用进行循环的时候,对数组的修改会影响循环

        $arr=['a'];
        foreach($arr as &$val){
          echo $val,'<br/>';//a b
          $arr[1]='b';
        }

    数组指针相关函数
    key($array):得到当前指针所在位置的键名,如果不存在返回null
    current($array):得到当前指针所在位置的键值,如果不存在返回false
    next($array):将数组指针向下移动一位,并且返回当前指针所在位置的键值;如果没有,返回false
    prev($array):将数组指针向上移动一位,并且返回当前指针所在位置的键值;如果没有,返回false
    reset($array):将数组指针移动到数组开始,并且返回当前指针所在位置的键值;如果没有,返回false
    end($array):将数组指针移动到数组的末尾,并且返回当前指针所在位置的键值;如果没有,返回false

        $arr=[
          'a','b','c',
          35=>'test',
          'username'=>'king',
          'age'=>12
        ];
        print_r($arr);
        /*
        Array
        (
            [0] => a
            [1] => b
            [2] => c
            [35] => test
            [username] => king
            [age] => 12
        )
        */
        echo '当前指针所在位置元素的键名为:',key($arr);//0
        echo '当前指针所在位置元素的键值为:',current($arr);//a
        echo next($arr);//b
        echo '当前指针所在位置元素的键名为:',key($arr);//1
        echo '当前指针所在位置元素的键值为:',current($arr);//b
        
        echo next($arr)";//c
        echo '当前指针所在位置元素的键名为:',key($arr);//2
        echo '当前指针所在位置元素的键值为:',current($arr),"
    ";//c
        
        echo prev($arr);//b
        echo '当前指针所在位置元素的键名为:',key($arr);//1
        echo '当前指针所在位置元素的键值为:',current($arr);//b
        
        echo end($arr);//12
        echo '当前指针所在位置元素的键名为:',key($arr);//age
        echo '当前指针所在位置元素的键值为:',current($arr);//12
        var_dump(next($arr),key($arr),current($arr));//bool(false) NULL bool(false)
        
        echo reset($arr);//a
        echo '当前指针所在位置元素的键名为:',key($arr);//0
        echo '当前指针所在位置元素的键值为:',current($arr);//a

    循环全部输出

        $arr=[
            'a','b','c',
            35=>'test',
            ''=>'aaa'
        ];
        while(!is_null(key($arr))){
           echo '当前指针所在位置的键名为:',key($arr),"
    ";
           echo '当前指针所在位置的键值为:',current($arr),"
    ";
           echo "
    ";
           next($arr);
        }

    获得扩展名

        $filename='1.txt.php.html';
        $res=explode('.',$filename);
        print_r($res);
        $ext=end($res);//指针移动到最后
        echo $ext;

    list():将下标连续的从0开始的索引数组赋值给相应的变量

         $arr=['a','b','c'];
         list($var1,$var2,$var3)=$arr;
         echo $var1,$var2,$var3;//a b c

    遍历二维数组

         $arr=[
           [1,'king1',12],
           [2,'king2',22],
           [3,'king3',32]
         ];
         foreach($arr as list($id,$username,$age)){
           echo $id,'-',$username,'-',$age,"
    ";
         }
        //1-king1-12
        //2-king2-22
        //3-king3-32

    each($array):得到当前指针所在位置的键值对,返回的是数组,包含4个部分;并且将指针向下移动一位

        $arr=[
          'a'=>'aaaa',
          'b'=>'bbbb'
        ];
         $res=each($arr);
         print_r($res);
        //Array
        //(
        //    [1] => aaaa
        //    [value] => aaaa
        //[0] => a
        //[key] => a
        //)

    输出当前指针位置的键值

        $arr=[
          'a'=>'aaaa',
          'b'=>'bbbb'
        ];
        echo key($arr),'-',current($arr);//a-aaaa

    循环数组

        $arr=[
          'a'=>'aaaa',
          'b'=>'bbbb'
        ];
        while(list($k,$v)=each($arr)){
          echo $k,'--',$v,"
    ";
        }
        //a--aaaa
        //b--bbbb

    数组中所有键名组成字符串

        $userInfo=[
          'username'=>'king',
          'password'=>'123456',
          'email'=>'382771946@qq.com'
        ];
        $keys=join(',',array_keys($userInfo));
        print_r($keys);//username,password,email
    
        //数组中所有键值转为字符串
        $vals="'".join("','",array_values($userInfo))."'";
        print_r($vals);//'king','123456','382771946@qq.com'
    
        //拼接成sql语句: INSERT user(username,password,email) VALUES('king','123456','382771946@qq.com')
        $sql="INSERT user({$keys}) VALUES({$vals})";
        echo $sql;//INSERT user(username,password,email) VALUES('king','123456','382771946@qq.com')

    in_array()

        $allowExts=['jpg','jpeg','png','gif'];
        $ext='jpg';
        var_dump(in_array($ext,$allowExts));//bool(true)

    字符串转数组并乱序

        $string='速,度,快,放,假,了';
        $arr=explode(',',$string);
        shuffle($arr);
        print_r($arr);
    
        //将键名与键值反转
        $arr=array_flip($arr);
        print_r($arr);
    
        //返回包含随机键名的数组 4个值
        $res=array_rand($arr,4);
        print_r($res);

    字符串转数组,求和

        $sum='10,20,30';
        echo array_sum(explode(',',$sum));//60

    计算并返回数组的乘积

        $sum='10,20,30';
        echo array_product(explode(',',$sum));//6000

    截取文件扩展名,并且检测扩展名是否在['jpg','jpeg','gif','png']

        $allowExts=['jpg','jpeg','gif','png'];
        $filename='1.txt.php.jpg';
        $arr=explode('.',$filename);
        $ext=end($arr);
        echo $ext;//jpg
        var_dump(in_array($ext,$allowExts));//bool(true)

    array_push():在最后追加数据
    array_pop():删除最后一个,并返回
    array_unshift():在前面追加数据
    array_shift():删除第一个,并返回

        $arr=['a','b','c'];
        $res=array_pop($arr);
        echo $res;//c
        print_r($arr);
        //Array
        //(
        //    [0] => a
        //    [1] => b
        //)
    
        $arr=['a','b','c'];
        array_push($arr,'hello world',123);
        print_r($arr);
        //Array
        //(
        //    [0] => a
        //    [1] => b
        //[2] => c
        //[3] => hello world
        //[4] => 123
        //)
    
        $arr=['a','b','c'];
        echo array_shift($arr);//a
        print_r($arr);
        //Array
        //(
        //    [0] => b
        //    [1] => c
        //)
    
        $arr=['a','b','c'];
        array_unshift($arr,'d');
        print_r($arr);
        //Array
        //(
        //    [0] => d
        //    [1] => a
        //[2] => b
        //[3] => c
        //)

    判断文件类型是否合法

        $filename='1.txt.jpg';
        $allowExts=['jpg','jpeg','gif','png'];
        $arr=explode('.',$filename);
        $ext=array_pop($arr);
        if(in_array($ext,$allowExts)){
          echo '文件类型合法';
        }else{
          echo '非法文件类型';
        }

    快速生成字符串

        $str1=join('',range(0,9));//string(10) "0123456789"
        $str2=join('',range('a','z'));//string(26) "abcdefghijklmnopqrstuvwxyz"
        $str3=join('',range('A','Z'));//string(26) "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    生成四位数随机验证码

        $arr1=range(0,9);
        $arr2=range('a','z');
        $arr3=range('A','Z');
        $newArr=array_merge($arr1,$arr2,$arr3);
        
        $res=array_rand(array_flip($newArr),4);
        echo join('',$res);

    检测文件是否存在

        $filename="msg.txt";
        $msgs=[];
        if(file_exists($filename)){
          //读取文件中的内容
          $string=file_get_contents($filename);
          if(strlen($string)>0){
            $msgs=unserialize($string);
          }
        }

    留言功能

        //检测用户是否点击了提交按钮
        if(isset($_POST['pubMsg'])){
          $username=$_POST['username'];
          $title=strip_tags($_POST['title']);
          $content=strip_tags($_POST['content']);
          $time=time();
          //将其组成关联数组
          $data=compact('username','title','content','time');
          array_push($msgs,$data);
          $msgs=serialize($msgs);
          if(file_put_contents($filename,$msgs)){
            echo "<script>alert('留言成功!');location.href='22-msg.php';</script>";
          }else{
            echo "<script>alert('留言失败!');location.href='22-msg.php';</script>";
          }
        }

    count()得到数组中元素的个数

        $arr=range('a','z');
        echo count($arr);//26
    
         $var=123;
         echo count($var),'<br/>';//1
         $var=null;
         echo count($var),'<br/>';//0

    for循环只能遍历下标连续的索引数组

        $arr=[
            5=>'a',
            -12=>'b',
            345=>'c'
        ];//不行
        $arr=[
            'username'=>'king',
            'age'=>12
        ];//不行
         for($i=0,$count=count($arr)-1;$i<=$count;$i++){
           echo $arr[$i],'<br/>';
         }

    HTML 与 PHP 混编
    if举例

        <?php if(true){ ?>
        <span>成功</span>
        <?Php }else{ ?>
        <span>失败</span>
        <?php } ?>
  • 相关阅读:
    JAVA垃圾收集器
    ora-12154
    获取IE浏览器关闭事件
    ajax 页面请求后,jsp页面定位
    poi 导出excel 异常处理方式--曲线救国法
    如何设计出高可用的分布式架构
    Java知识点整理(二)
    spring cloud & dubbo
    Spring Autowired原理
    如何更好的使用JAVA线程池
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12176212.html
Copyright © 2020-2023  润新知