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;

          }

          

    今天就到这里。

     

        

时间: 2024-10-13 11:15:59

php学习day8---数组的知识的相关文章

【扩展知识2】学习一些重要的知识

[扩展知识二]学习一些重要的知识 [扩展目录] 1.      布尔型,浮点型.指针的变量与0值得比较 2.      类型转换 3.      关键字sizeof和strlen()函数 A:bool变量与0值得比较 布尔型,用于表示布尔值,即逻辑值TRUE(真)和FALSE (假).在C语言中非零即为真,零就为假. 较合理的写法是: //测试环境:win7_32+VC++6.0.有的编译器可能不识bool //bool变量与0,1的比较 #include <stdio.h> int main

退休老码农提醒你!学习Java,这些知识要牢记,能让你少走弯路!

现在的java在编程界基础已经根深蒂固了,随之带来的影响就是有大量的岗位,大量的工作方向,虽然现在很多的新兴语言势头都非常的猛烈,但是这并不影响java依然体量最大的编程语言,而且丝毫也看不出这门语言有任何衰减的趋势,依然有大量的从业人员在java开源领域贡献着大量的代码,在新兴的领域java切入进来也是毫不费力.创一个小群,供大家学习交流聊天如果有对学java方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学java能够持之以恒java爱好群,如果你想要

TestNG学习-001-基础理论知识

此 文主要讲述用 TestNG 的基础理论知识,TestNG 的特定,编写测试过程三步骤,与 JUnit4+ 的差异,以此使亲对 TestNG 测试框架能够有一个简单的认知. 希望能对初学 TestNG 测试框架的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激! TestNG是什么?TestNG是一个灵感来自于 JUnit 和 NUnit 的一个设计用来简化广泛的测试需求的开源自动化测试框架,其引入了一些新的功能,使其功能更强大,而且易于使用,但是 TestNG 不是 JUnit 的扩展.它

Linux学习日志1-基本知识

1.冯.诺依曼体系计算机五大组成部件: 1.控制器:控制其他四个部件的运作 2.运算器:负责计算加减乘除 3.存储器:存放运算的数据来源与结果 4.输入设备:接收数据输入存入存储器 5.输出设备:从存储器接收数据输出 2.Linux的起源: 1991年一个芬兰大学生Linus Torvalds参考其老师的教学用操作系统Minix的思想(注意仅仅是思想),自己写了一个操作系统内核,命名为Linux 0.0.1,发布在comp.os.minix新闻组上,正式宣告Linux内核的诞生.从那时起,Lin

PHP学习笔记-数组(1)

1-1 数组定义 1.什么是数组? 所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量. 语法如下: <?php //设置某个变量为一个空数组 $arr=array(); ?> 1-2 索引数组初始化 PHP有两种数组:索引数组.关联数组. 索引和关联两个词都是针对数组的键而言的. 索引数组是指数组的键是整数的数组

java学习之数组(二)

学编程吧java数组学习(二)发布了,欢迎大家通过xuebiancheng8.com来访问. 下面接着来分析数组,前面分析了什么是数组,为什么要用数组,下面来分析下如何使用数组 数组和其他数据类型一样,使用前要先定义.如下 int a[];这样就声明了一个数组 a = new int[10];然后为这个数组申请10个大小的空间 a[0] = 1; a[1] = 2; ....等等来为数组 赋值,为数组赋值完成后就可以通过下标来访问数组 当然数组在定义的时候也可以讲上面操作合并即 int a []

java学习之数组(一)

学编程吧java学习之数组发布了,欢迎大家通过xuebiancheng8.com来访问. 下面来分析下java中的数组. 什么是数组呢,为什么要用数组呢,加入现在需要统计一个班的考试成绩,这个班有30个学生,怎么办呢,如果不用数组,那么就得定义30个变量来保存30名同学的成绩,这样很明显对程序员来说是非常痛苦呢,光30个变量就得定义半天,而且又都不好记,容易记混了,那怎么办呢,这个时候就可以用数组,数组故名思议就是一组数的几个就叫数组,这这一组数使用同一个变量,只要一个变量就可以保存这30个同学

PHP学习之中数组-遍历一维数组【2】

在PHP学习之中数组[1]中学会怎么创建一个数组,如果PHP学习之中数组[1]中的元素多的话,我们访问元素又是一个问题了,下面我们就使用for语句while,foreach来遍历我们的数组: <?php /* range()原型: * array range ( mixed $start , mixed $limit [, number $step = 1 ] ) * 参数说明: * start 序列的第一个值. limit 序列结束于 limit 的值. step 如果给出了 step 的值,

PHP学习之中数组--创建数组【1】

在PHP中数组的定义有三种写法,分别是: <?php //第一种方式是用关键字 array来创建的 $username = array("demo1","demo2","demo3","demo4"); <?php //第二种方法是用直接声明一个变量,在变量的右边加上中括号的方式来创建数组 $usrename = array(); $username[0]="aaa"; $username[1]