• php学习day8---数组的知识


      今天学习了数组的相关知识。

    一、数组

      1.数组的定义

      什么是数组呢?数组其实就是一组数据的集合,我们可以根据数组中的下标值(也就是键值关系)来取出我们想要数据。数组的定义通常有两种方式:

       方法1: $arr = array(10,20,30,40,50);

       方法2:  $arr[] = 10;

            $arr[] = 11;

            $arr[] = 12;

      通过以上的方式可以创建数组并且给数组赋值。被创造的数组就类似于一个小的仓库,我们可以随时去仓库里面找我们想要的数据。

      2.数组的分类

      数组可以根据其下标(键值关系)的不同分为三类:枚举数字,关联数组,混合数组。

      枚举数字:也被称为索引数组,其主下标是一组从零开始的正整数(与其他语言中的数组类似)。比如:

          $arr= array(11,22,33,44,55,66,77);

          //上面的数组的下标就是从零开始的正整数依次为0,1,2,3,4,5,6

      关联数组:数组的下标是字符串,这类字符串通常代表一定的含义,可以更方便的去取数据。比如:

          $arr1 = array(

            "name"     =>  "localhost",

            "psd"         =>  123456,

            "username"=>  "root"

          );

       以上这类数组就是关联数组。

      混合数组:既有数字下标,也有字符下标的数组,比如:

          $arr = array(

            1=>1,

            2=>2,

            "user"=>"很shape",

            "psd"=>123456

          );

       以上的数组就是混合数组。

      注意:1.如果数组元素中没有设定索引值,则其下标为当前最大索引+1;

         2.如果下标为浮点数,则会向下取整。

         3.下标如果有重复,则后面的数会覆盖前面的数。

         4.php的数组,最后一项的逗号可以有,并不代表单独的一项。

         5.数组单元的顺序,是由数组中放入的顺序决定的,而不是其下标。

      3.多维数组

      多维数组其实就是多个数组相互嵌套所形成的数组,如下:

        $arr = array(

            array(1,2,3,4,5,6,7,88,99),

          "abc"=>array(11,22,33,44,55),

           2=>  array(55,66,77,88,99),

          "def"=>array("aa"=>"aa","bb"=>"bb","cc"=>"cc")

        );

      上面的数组就是一个常见的二维数组;

      4.数组的基本用法

        1)求一个一维数组的平均值;

          $a = array(1,2,3,4,5,6,7,8,9);

          $len = count($a);  //这个数组的长度

          $sum = 0;      //用于总和

          $c = 0;        //用于储存数的个数

          for($i=0;$i<$len;++$i){

            $sum += $a[$i];      //累加器

            ++$c;       //计数器

          }

          echo "平均值为".($sum/$c);

        2)求一个二维数组的平均值

          $aa = array(    //二维数组

            array(11,22,33),

            array(22,33,44),

            array(222,222,333,444  

          );

          $len = count($aa);        //获取$aa的长度

          $sum = 0;            //用于总和  

          $c = 0;              //用于计数

          for($i=0;$i<$len;++$i){     //循环第一层数组

             $t = $aa[$i];        //取出第i个数组

             $len2 = count($t);     //获得第i个数组的长度

             for($k=0;$k<$len2;++$k){  //循环第i个数组

                $sum += $t[$k];    //循环累加所有数组的所有项

                ++$c;          //计数一共有多少项

             }

          }

          echo "平均值".($sum/$c);

        3)求一个一维数组的最大值

          $arr = array(10,52,85,32,1,5,4,632,5);

          $max = $arr[0];        //先将第一项放入$max中,假设第一项为最大  

          $pos = 0;      //假设第第一项最大,下标为0;

          $len = count($arr);  //获取数组的长度

          for($i=0;$i<$len;++$i){  //遍历数组

            if($arr[$i]>$max){    //将每一项与最大值进行对比

              $max = $arr[$i];  //将新的最大值赋值给$max

              $pos = $i;      //最大值的下标付给$pos

            }

          }

          echo "最大值:".($max);

          echo "最大值下标是".($pos);

    二、数组的方法

      1.数组的遍历的方法

          数组遍历的方法有许多,我们首先来看第一个

          foreach( $数组变量名  as   【$key =>】 $value ){

              //循环体;这里可以去“使用”$key 和 value;

          }

          注意

            1)$key 和 $value 就是该遍历语句一次次取得的数组的每一个单元(项)的下标和对应值。而且,它总是从数组的开头往后按顺序取数据。

            2)foreach也是正常的循环语法结构,可以有break和continue等操作。

             3)遍历过程中值变量默认的传值方式是值传递

            4)遍历过程中值变量可以人为设定为引用传递foreach($arr as $key => &$value){ ... }

            5)foreach默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作,则会复制数组后在复制的数组上继续遍历循环(原数组保持不变)。

            6)foreach中如果值变量是引用传递,则无论如何都是在原数组上进行。

        foreach的主要原理就是运用内部指针的指向来遍历的,默认情况下,该指针是指向第一项的,数组中如果没有指定下标,则在操作过程就是通过指针的指向来进行操作的,所谓的遍历就是一次次取得当前单元的键和值,并放入对应的变量$key和$value中,然后将指针移到下一个单元。

        数组是一个总体数据,可以对指针进行操作的函数有:

          current($arr);  获得数组的当前指针所在单元的值

          key($arr);    获得数组的当前指针所在单元的值

          next($arr);   先将数组的指针移向下(后)一个单元,然后取得该新单元的值;

          prev($arr);    先将数组的指针移向上(前)一个单元,然后取得该新单元的值;

          end($arr);    先将数组的指针移向最后单元,然后取得该新单元的值;

          reset($arr);       先将数组的指针移向第一个单元,然后取得该新单元的值;

      2.使用for和next遍历数组

          在php数组中,往往不能单纯使用for循环进行遍历,for循环只能循环下标为连续纯整数的数组。

              $arr = array(1=>3,"a"=>7,'bb'=>65);

              $len = count($arr);    //获取长度

              for($i=0;$i<$len;++$i){  //循环数组

                $key = key($arr);    //获取当前单元的键

                $value = current($arr);  //获取当前单元的值

                echo "$key =>$value";  //输出键值对

                next($arr);        //把指针下移

              }

      3.each函数的使用

          each()函数的作用:先取得一个数组的“当前单元”的下标和值(并放入一个数组),然后将指针移到下一个单元。

              $a  =  each($数组名);        //此时$a就是一个数组了

        举例:  

            $arr = array(1=>3,4=>5,'nihao'=>hh);    //数组$arr

            $b = each($arr);    //获取指针第一项的键值对,给$b

            $c = each($arr);    //获取指针第二项的键值对,给$c

            echo $b;        //输出$b  结果为:array(0=>1,[key]=>1,1=>3,[value]=>3)

            echo $c;        //输出$c  结果为:array(0=>4,[key]=>4,1=>5,[value]=>5)

          由此可见,由each函数变量数组的到的结果也是数组,可以根据此数组的键值来获取原数组中的键所对应的值。

      4.list()函数的使用;

          list()函数用于一次性取得一个数组中从0开始的数字下标的多个单元的值。

          使用形式:

              list($变量1,$变量2,......)=$数组;

        注意:这里变量的个数,要跟该数组的数字下标的单元相对应,如果某个数组的相应下标不存在,则就会报错。

        举例:

              $a = array(0=>2,1=>3,5=>6,4=>6,3=44,2=>9);

              list($c,$d,$e,$f,$g)=$a;  //将$a数组中下标为0,1,2,3,4所对应的值分别赋值给$c,$d,$e,$f,$g;

              echo "c=$c,d=$d,e=$e,f=$f,g=$g";  //输出:c=2,d=3,e=9,f=44,g=6;

        通过以上原理,我们可以更好的进行扩展了:用while(),each(),list()来遍历数组。如:    

              $arr = array(1=>3,'aa'=>5,6=>7);

              while(list($key,$value)=each($arr)){

                echo "$key = $value"

              }

        上面的while,each,list方法的组合运用可以很好的进行数组的遍历,其作用和foreach一样。

    三、数组的排序

      1.常见的排序函数

        

      2.冒泡排序算法

              数组内部从小到大排序

                $a = array (5,10,8,7,55,6,2,5,8,79,4,1,66)   

                $len = count($a);

                for($i = 0;$i<$len-1;++$i){  //一共需循环$len-1次

                  for($k = 0;$k<$len-$i-1){//

                    if($a[$k]>$a[$k+1]){

                      $t=$a[$k];

                      $a[$k]=$a[$k+1];

                      $a[$k+1] = $t;

                    }

                  }

                }

      3.选择排序

              数组内部从小到大排序

              $a = array (5,10,8,7,55,6,2,5,8,79,4,1,66);

              $len = count($a);

              for($i = 0;$k<$len-1;++$i){

                $max = $a[0];

                $pos = 0;

                for($k=0;$k<$len-$i;++$k){

                  if($a[$k]>$max){

                    $max = $a[$k];

                    $pos = $k;

                  }

                }

                $t = $a[$pos];

                $a[pos] = $a[$len-$i-1];

                $a[$len-$i-1] = $t;

              }

              

        今天就到这里。

         

             

  • 相关阅读:
    四种访问权限修饰符在工作中的常见用法
    大数据(hadoop,hive,hbase,spark,flume等)各技术间的关系
    docker+dubbo的一些注意事项
    mysql的索引介绍
    基于dubbo的微服务的自我看法
    Kubernetes(K8S)集群在centos7.4下创建
    自我反省一年多
    淘淘商城
    SpringMVC的随笔3
    ARM(LS1046A)模块及XC7Z045模块调试记录
  • 原文地址:https://www.cnblogs.com/pzp-fire/p/5861487.html
Copyright © 2020-2023  润新知