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;

          }

          

    今天就到这里。

 

     

         

posted @ 2016-09-13 00:27  time呦_呦  阅读(306)  评论(0编辑  收藏  举报