zoukankan      html  css  js  c++  java
  • PHP-----PHP程序设计基础教程----第四章数组

    4.1 初识数组

    4.1.1 什么是数组

      数组是一个可以存储一组或者一系列数值的变量。在PHP中,数组中的元素分两部分,分别为键(Key)和值(Value)。其中,“键”为元素的识别名称,也被称为数组下标,“值”为元素的内容。“键”和“值”存在一种对应关系,称为映射。

      1、索引数组

      下标为整数的数组,即数组的“键”为整数,仅仅指示元素在数组中的位置,不表示对应值的含义

      2、关联数组

      下标为字符串的数组,即数组的“键”为字符串,显示时,以元素的添加顺序有关,与下标顺序无关

      3、混合数组

      数组的“键”既有整数,也有字符串的数组

    4.1.2 数组的定义

      1、使用赋值方式定义数组

    <?php
    //**********定义索引数组**********//
        //方式1:
        $arr1[0]="欧阳华夏";//姓名
        $arr1[1]=25;//年龄
        $arr1[2]="男";//性别
        $arr1[3]=true;//是否单身
        echo "<pre>";
        print_r($arr1);
        echo "</pre>";
        /*
        输出结果:
        Array
        (
            [0] => 欧阳华夏
            [1] => 25
            [2] => 男
            [3] => 1
        )
        */
    
        //方式2:
        $arr2[]="欧阳华夏";//姓名
        $arr2[]=25;//年龄
        $arr2[]="男";//性别
        $arr2[]=true;//是否单身
        echo "<pre>";
        print_r($arr2);
        echo "</pre>";
        /*
        输出结果:
        Array
        (
            [0] => 欧阳华夏
            [1] => 25
            [2] => 男
            [3] => 1
        )
        */
    
        //方式3
        $arr3=[0=>"欧阳华夏",1=>25,3=>"男",4=>true];
        echo "<pre>";
        print_r($arr3);
        echo "</pre>";
        /*
        输出结果:
        Array
        (
            [0] => 欧阳华夏
            [1] => 25
            [2] => 男
            [3] => 1
        )
        */
    
    //**********定义关联数组**********//
        //方式4:
        $arr4["name"]="欧阳华夏";//姓名
        $arr4["age"]=25;//年龄
        $arr4["sex"]="男";//性别
        $arr4["is_Single"]=true;//是否单身
        echo "<pre>";
        print_r($arr4);
        echo "</pre>";
        /*
        输出结果:
        Array
        (
            [name] => 欧阳华夏
            [age] => 25
            [sex] => 男
            [is_Single] => 1
        )
        */
       
       //方式5
       $arr5=["name"=>"欧阳华夏","age"=>25,"sex"=>"男","is_Single"=>true];
       echo "<pre>";
       print_r($arr5);
       echo "</pre>";
       输出结果:
       /*
       Array
       (
            [name] => 欧阳华夏
            [age] => 25
            [sex] => 男
            [is_Single] => 1
       )
       */
    ?>

      在上述示例代码中,分别定义了索引数组和关联数组

      ①方式1对应方式4,创建一个数组变量,使用赋值运算符挨个给数组变量赋值

      ②方式2创建数组,赋值时没有指定“键”,使用默认键,即“键”从0开始

      ③方式3对应方式5,在一个“[]”中使用“=>”符号给数组赋值

      

      2、使用array()函数定义数组

      除了通过赋值方式定义数组外,还可以使用array()函数定义数组,它接收数组的元素作为参数,多个元素之间使用英文逗号分隔;

    <?php
    //**********定义索引数组**********//
        //方式1
        $arr1=array("欧阳华夏",28,"男",true);
    //**********定义关联数组**********//
        $arr2=array("name"=>"欧阳华夏","age"=>28,"sex"=>"男","is_Single"=>true);    
    ?>

    4.1.3 数组元素的获取

      获取数组中单个元素的值:

      $数组名[键名] 

      打印数组的全部值:

    <?php
    /************************方法1********************************/
        echo "<pre>";
        print_r("数组名")
        echo "</pre>";
    /************************方法2********************************/
        echo "<pre>";
        var_dump("数组名")
        echo "</pre>";
    ?>

      PHP提供了print_r()函数和var_dump(),专门用于输出数组中的所有元素,需要注意一下几点:

      ①print_r()函数只能打印出来数组中的元素

      ②var_dump()函数在打印数组中元素的同时还能打印出元素中值的数据类型

      ③在上述代码中,都有两行echo "<pre>"代码,其中“pre”标签的作用是用格式化文本输出。

     4.1.4 删除数组

      PHP中提供了unset()函数用于删除数组的元素,使用规则:

      ①语法: unset(数组名[索引]) 

      ②删除元素后数组不会重建该元素的索引。即未被删除的元素的索引不会因为删除了元素而改变

      ③可以删除整个数组: unset(数组名) 

    4.1.5 数组操作符

      数组这种符合类型的数据可以进行运算,数组的运算通过数组操作数实现。见表4-1:

      表4-1 数组操作运算符

    运算符

    含义

    示例

    +

    联合

    $a+$b$a$b的联合

    ==

    相等

    $a==$b;如果$a$b具有相同的键值对,则为true

    ===

    全等

    $a===$b;如果$a$b具有相同的键值对且顺序和类型都相同则为true

    !=

    不等

    $a!=$b;如果$a不等于$b,则为true

    <>

    不等

    $a<>$b;如果$a不等于$b,则为true

    !==

    不全等

    $a!===$b;如果$a不全等于$b,则为true

       注:”+“为联合运算符,用于合并数组。如果出现下标相同的元素,则保留第一个数组内的元素。

    4.2 数组的常见操作

    4.2.1 数组指针

      对数组中的元素进行访问过程中需要用到数组指针。数组指针用于指向数组中的某个元素,默认情况下指向数组的第一个元素。注意:一个数组只有一个数组指针。具体数组指针见表4-2:

    表4-2 数组指针操作函数

    函数名

    作用

    mixd current(array $array)

    获取数组中当前元素的值,如果内部指针超出数组的末端,则返回false

    mixd key(array $array)

    获取当前元素的键名

    mixd next(array $array)

    将数组的内部指针向前移动一位

    mixd prev(array $array)

    将数组的内部指针倒回一位

    mixd end(array $array)

    将数组的内部指针指向最后一个元素

    mixd reset(array $array)

    重置指针,即将数组的指针指向第一个元素

    4.2.2 数组遍历

      在PHP中使用foreach语句实现数组的遍历:

      无键名遍历

    foreach(数组名 as $Value){ 
         //循环体 
    }

      键值对遍历

    foreach(数组名 as $Key => $Value){
         //循环体
    }

    4.2.3 数组排序----冒泡排序

     1 <?php
     2     //********************冒泡排序*******************//
     3     $array=[9,8,2,5,3];
     4     /*从小到大
     5     冒泡排序思路:
     6     1、从第一个元素开始,将相邻的两个元素依次进行比较,直到最后两个元素完成比较。如果前一个元素比后一个元素大,交换位置,整个
     7     过程完成后,数组中最后一个元素就是最大值,这就完成了第一轮比较
     8     2、除了最后一个元素,将剩余的元素进行两两比较,过程与第一步相似,这样就可以将数组中第二大的数放在倒数第二个位置
     9     3、依次类推,持续对元素进行两两比较,直到没有任何一对元素需要比较为止
    10     */
    11    
    12     for($i=0;$i<count($array)-1;$i++){
    13           //最外层循环,控制比较的轮数,很明显,冒泡排序比较轮数=数组长度-1
    14           for($j=0;$j<count($array)-1-$i;$j++){
    15               //里层循环控制相邻的两个数,$j的取值范围要注意,没进行一轮,$j的取值小一次
    16               if($array[$j]>$array[$j+1]){
    17                   $temp=$array[$j];
    18                   $array[$j]=$array[$j+1];
    19                   $array[$j+1]=$temp;
    20               }
    21           }
    22    }

    4.2.4 数组元素查找

       1、顺序查找法----------查找一个数组中是否包含数字8,如果包含,返回当前元素的索引,否则返回“查无此数”;

     1 <?php
     2     //定义数组
     3     $arr=array(2,3,5,8,9);
     4     //定义函数,查找数字8
     5     function searchIndex($Array,$Value){
     6         for($i=0;$i<count($Array);$i++){
     7             if($Array[$i]===$Value){
     8                 return $i ;
     9             }
    10         }
    11         return "查无此数";
    12     }
    13     
    14     $result=searchIndex($arr,8);
    15     echo $result;
    16 ?>

      2、二分查找法-----查找一个数组中是否包含元素5,如果存在,则输出下标,否则返回“查无此数”

     1 <?php
     2     //定义数组,
     3     $arr=array(2,3,5,8,9,11,16);
     4     //定义函数
     5     function binarySearch($Array,$Value,$Start_index,$End_index){
     6         if($Start_index > $End_index){
     7             return "查无此数";
     8         }
     9         //获取中间元素下标
    10         $Mid_index=round(($Start_index + $End_index)/2);
    11         if($Array[$Mid_index] > $Value){//元素在中间元素的左边
    12             //从左边查找
    13             binarySearch($Array,$Value,$Start_index,$Mid_index-1);
    14         }else if($Array[$Mid_index] < $Value){//元素在中间元素右边
    15             //从右边查找
    16             binarySearch($Array,$Value,$Mid_index+1,$End_index);
    17         }else{//查找元素和中间元素值相同
    18             echo $Mid_index;
    19         }
    20     }
    21     binarySearch($arr,5,0,count($arr)-1);
    22 ?> 

    4.3 数组的常用函数

     4.3.1 基本函数

      1、is_array()函数

       is_array()函数的作用是判断一个变量是否是一个数组,如果是数组,返回true,否则返回false。

       bool is_array(mixed $var); 

      is_array()函数接受一个mixed类型的变量var,然后判断这个变量是不是数组。

      2、count()函数

      count()函数的作用是用于计算数组中元素的个数。

       int count(mixed $var [,int $mode]); 

      在上述声明中,count()函数接收两个参数,其中$var参数是必须的,表示传入的数组对象;$mode参数是可选参数,值为0或者1。
      $mode=0----->只显示一维数组的个数;
      $mode=1----->递归计算多维数组中每个元素的个数;

      示例如下:

     1 <?php
     2     //一维数组$arr1
     3     $arr1=array("百度","新浪","搜狐","网易","传智");
     4     //输出长度
     5     echo '一维数组$arr1的长度是:' . count($arr1) . "<br/>";
     6     
     7     //二维数组
     8     $arr2=array(
     9         '$arr3'=>array("a","b","c","d","e"),
    10         '$arr4'=>array("1","2","3","4","5")
    11     );
    12     //输出长度
    13     
    14     //所有元素
    15     echo '$arr2的所有元素的个数:' . count($arr2,1) . "<br/>";//计算二维数组中所有元素的个数,12个
    16     //一维元素
    17     echo '$arr2的一维元素的个数:' . count($arr2) . "<br/>";//计算二维数组中所有一维元素的个数,2个
    18 ?>

       3、array_unique()函数

      array_unique()函数的作用是移出数组中的重复元素。

       array array_unique(array $array); 

      在上述声明中,array_unique()函数接受一个数组,去除重复元素后返回一个新的数组。在使用该函数时,首先将数组元素的值作为字符串排序,然后对每个值只保留第一个键名,忽略后面所有的键名。

     1 <?php
     2     $input=array("a"=>"green","red","b"=>"green","blue","red");
     3     echo "<pre>";
     4     print_r($input);
     5     //调用函数
     6     $result=array_unique($input);
     7     print_r($result);
     8     echo "</pre>";
     9     
    10     /*运行结果
    11     Array
    12     (
    13         [a] => green
    14         [0] => red
    15         [b] => green
    16         [1] => blue
    17         [2] => red
    18     )
    19     Array
    20     (
    21         [a] => green
    22         [0] => red
    23         [1] => blue
    24     )
    25     */
    26 ?>

    4.3.2 键值对的相关函数

       1、array_search()

      array_search()函数用于获取数组中元素对应的键名。

         array array_search(mixed $needle,array $haystack [,bool $strict]); 

      在上述声明中,$needle表示在数组中要查找的值,$haystack表示被查询的数组。$strict参数是可选的,当值为true时,就会在$haystack数组中检查$needle的类型。

    1 <?php
    2     $array=array(0=>"blue",1=>"red",2=>"green",3=>"red");
    3     echo "green对应的键为:";
    4     echo array_search("green",$array);
    5     //结果:green对应的键为:2
    6 ?>

      当被查询的元素在数组中出现两次以上时,那么array_search()函数返回第一个匹配的键名。

      2、array_keys()函数

      array_keys()函数同样用于获取数组中元素对应的键名。不同的是,array_keys()函数可以返回所有匹配的键名。

          array array_keys(array $input [,mixed $search_value [,bool $strict]]);  

      上述声明中,$input表示要被查询的数组;$search_value参数是可选参数,当给$search_value赋值时,函数返回该值的键名,否则返回$input数组的所有的键名。$strict参数用来进行全等比较,需要传入一个布尔值,默认为false,如果为true则根据类型返回带有指定值的键名。

     1 <?php
     2     //定义数组arr1
     3     $arr1=array(0=>"ttg","name"=>"dandy");
     4     print_r(array_keys($arr1));                //返回数组中元素的所有键名
     5     //Array ( [0] => 0 [1] => name )
     6     print_r(array_keys($arr1,"dandy"));        //获取数组元素为"dandy"对应的键名
     7     // Array ( [0] => name )
     8     
     9     //定义数组arr2
    10     $arr2=array(11,12,32,"11");
    11     print_r(array_keys($arr2,11));            //获取元素11(不依赖类型)
    12     //Array ( [0] => 0 [1] => 3 )
    13     print_r(array_keys($arr2,"11",true));    //获取字符串类型的元素的"11"
    14     // Array ( [0] => 3 )
    15 ?>

      array_keys()函数可以根据传入的参数,返回不同的键名。当传入的参数是一个数组时,则返回所有的键。当传入一个指定数组中某个元素时,返回该元素对应的键。

    4.3.3 排序函数

      PHP提供了多个排序的函数,例如sort()函数、rsort()函数、ksort()函数等。

      以sort()函数为例,讲解数组的排序功能。sort()函数的作用就是对数组中的元素按照从小到大的顺序进行排序。

       bool sort(array $array [,int $sort_flag=sort_regular]); 

      在上面的声明中,$array参数表示需要排序的数组,$sort_flag是可选参数,sort()函数会根据$sort_flag的值改变数组的排序方式。$sort_flag的取值如表4-3所示:

      表4-3 $sort_flag的取值范围

    取值范围

    排序方式

    SORT_REGULAR

    默认值,将自动识别数组元素的类型进行排序

    SORT_NUMERIC

    用于数字元素的排序

    SORT_STRING

    用于字符串元素的排序

    SORT_LOCALE_STRING

    跟去当前local设置来把元素当作字符串比较

      示例代码:

    <?php
        $arr=array("4apple","3banana","1orange","2peach");
        sort($arr,SORT_NUMERIC);
        echo "<pre>";
        print_r($arr);
        echo "</pre>";
        
        /*运行结果:
        Array
            (
                [0] => 1orange
                [1] => 2peach
                [2] => 3banana
                [3] => 4apple
            )
        */
    ?>

    4.3.4 合并和拆分函数

      1、array_merge()函数

      array_merge()函数的作用是合并一个或多个数组。

       array array_merge(array $array1 [,array $...]);  

      array_merge()将一个或者多个数组的单元合并起来,一个数组的值附加在另一个数组的后面,返回一个新的数组。
      ①如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前面的值;
      ②如果数组中包含数字键名,后面的值不会覆盖原来的值,而是附加在数组的后面;
      ③如果数组是数字索引的,则键名会以连续方式重新编排索引。  

     1 <?php
     2     $array1=array("color"=>"red",2,4);
     3     $array2=array("a","b","color"=>"green","shape"=>"trapezoid",4);
     4     $result=array_merge($array1,$array2);
     5     echo "<pre>";
     6     print_r($result);
     7     echo "</pre>";
     8     
     9     /*运行结果:
    10     Array
    11         (
    12             [color] => green
    13             [0] => 2
    14             [1] => 4
    15             [2] => a
    16             [3] => b
    17             [shape] => trapezoid
    18             [4] => 4
    19         )
    20     */
    21 ?>

       2、array_chunk()函数

      函数array_chunk()的作用是将一个数组分割成多个数组。

       array array_chunk(array $input,int $size [,bool $preserve_keys]);   

      上述声明中,$input表示要分割的数组,$size是分割后每个数组中元素的个数,$preserve_keys是一个可选参数。如果将该参数设置为true,则分割后的数组中元素保留原来的索引,如果将该参数设置为false,则分割后数组中的元素的索引将从零开始。

      代码如下: 

     1 <?php
     2     $arr=array("cctv-a","cctv-b","cctv-c");
     3     //分割数组
     4     echo "<pre>";
     5     echo "分割后的数组为:" . "<br/>";
     6     print_r(array_chunk($arr,2));
     7     echo "</pre>";
     8     /*运行结果:
     9     分割后的数组为:
    10     Array
    11     (
    12         [0] => Array
    13             (
    14                 [0] => cctv-a
    15                 [1] => cctv-b
    16             )
    17 
    18         [1] => Array
    19             (
    20                 [0] => cctv-c
    21             )
    22 
    23     )
    24     */
    25    
    26    //第二次分割
    27    echo "<pre>";
    28    echo "分割后的数组为:" . "<br/>";
    29    print_r(array_chunk($arr,2,true));
    30    echo "</pre>";
    31    /*运行结果:
    32   分割后的数组为:
    33     Array
    34     (
    35         [0] => Array
    36             (
    37                 [0] => cctv-a
    38                 [1] => cctv-b
    39             )
    40 
    41         [1] => Array
    42             (
    43                 [2] => cctv-c
    44             )
    45 
    46     )
    47    */
    48 ?>

     4.3.5 其他函数

       1、array_rand()函数

       array_rand()函数的作用是从数组中随机取出一个或多个元素。

       mixed array_rand(array $input [,int $num_req]); 

      array_rand()函数接受一个input参数和一个可选的参数num_req,其中input参数用于指定接受的数组,num_req用于指定取出元素的个数,默认为1。如果只取出一个元素,array_rand()会返回一个随机元素的键名,否则返回一个包含随机键名的数组。

      代码如下:

     1 <?php
     2     $input=array("科比","姚明","詹姆斯","艾佛森","基德");
     3     echo "<pre>";
     4     echo "随机获取一个元素" . "<br/>";
     5     print_r(array_rand($input));
     6     echo "<br/>";
     7     echo "随机获取两个元素" . "<br/>" ;
     8     print_r(array_rand($input,2));
     9     echo "</pre>";
    10     
    11     /*运行结果:
    12     随机获取一个元素
    13     2
    14     随机获取两个元素
    15     Array
    16     (
    17         [0] => 2
    18         [1] => 3
    19     )
    20     */
    21 ?>

      2、array_reverse()

      array_reverse()函数的作用是返回一个元素顺序相反的数组。

       array array_reverse(array $array [,bool $preserve_keys]); 

      array_reverse()接受数组array作为输入并返回一个元素为相反顺序的新数组,如果preserve_keys为true,则保留原来的键名。

      代码如下:

     1 <?php
     2     $input=array("ibim",122,array("dell","apple"));
     3     $result=array_reverse($input);
     4     echo "<pre>";
     5     print_r($result);
     6     echo "</pre>";
     7     /*运行结果:
     8     Array
     9     (
    10         [0] => Array
    11             (
    12                 [0] => dell
    13                 [1] => apple
    14             )
    15 
    16         [1] => 122
    17         [2] => ibim
    18     )
    19     键名被修改
    20     */
    21    $result_keyed=array_reverse($input,true);
    22    echo "<pre>";
    23    print_r($result_keyed);
    24    echo "</pre>";
    25    /*运行结果:
    26   Array
    27     (
    28         [2] => Array
    29             (
    30                 [0] => dell
    31                 [1] => apple
    32             )
    33 
    34         [1] => 122
    35         [0] => ibim
    36     )
    37     键名保留不会修改
    38    */
    39 ?>
  • 相关阅读:
    在网络中传输数据(I)
    WinForm DataGrid 中在 DataGridBoolColumn 的列标题上加一个 CheckBox 实现全选和全不选
    datagrid 相关
    Agile Framework视频演示发布
    asp.net(含:模拟登陆,照片列表)
    会计电算化常考题目一
    jquery实例教学一
    ASP .net(照片列表详细功能CRUD演示)
    会计电算化常考题目
    ASP.NET(get和post比较)
  • 原文地址:https://www.cnblogs.com/WangYujie1994/p/10342474.html
Copyright © 2011-2022 走看看