• 2018-1-25 PHP数组


      php数组:

    数组基础:

    ①php中,数组的下标可以是整数,或字符串。

    ②php中,数组的元素顺序不是由下标决定,而是由其“加入”的顺序决定。

    定义:$arr1=array(元素1,元素2......);

    例:

    array(1,  5,  1.1,  “abc”,  true,  false); //可以存储任何数据,此时为“默认下标”,

    array(2=>1,  5=>5,  3=>1.1,  7=>“abc”,  0=>true);//下标可以任意设定(无需顺序,无需连续)

    array(2=>1,  5,  1=>1.1,  “abc”,  0=>true)//可以加下标,也可以不加(默认下标),下标分别是:2,3,1,4,0

    默认下标规则:前面已经用过的最大数字下标+1

    array(2=>1,  ‘dd’=>5,  1=>1.1,  “abc”,  0=>true)  混合下标,同样遵循默认下标规则

    array(-2=>1,  ‘dd’=>5,  1.1,  “abc”,  true);   负数下标不算在整数下标中,而只当作字符下标则最后3项的下标是:0, 1, 2

    array(2.7=>1,  ‘dd’=>5,  1=>1.1,  “abc”,  0=>true);  浮点数下标为自动转换为整数,且直接抹掉小数

    array(“2.7” =>1,  ‘dd’=>5,  “11”=>1.1,  “abc”,  true)  纯数字字符串下标,当作数字看待,则此时下标为:2, ‘dd’, 11, 12, 13

    array(2=>1,  ‘dd’=>5,  true=>1.1,  “abc”,  false=>true)  布尔值当下标,则true1false0

    array(2=>1,  ‘dd’=>5,  2=>1.1,  “abc”,  true)  如果下标跟前面的重复,则单纯覆盖前面同名下标的值,此时相当于为:array(2=>1.1,  ‘dd’=>5,  “abc”,  true)

    数组分类:

    1、按键值关系:

    ①关联数组:通常是指下标为字符串,并且该字符串大体可以表达出数据的含义的数组。

    $person = array(

      “name” => “小花”,  

      “age”=>18,

      “edu” => “大学毕业” 

    );

    ②索引数组:同js;

    2、按数组层次:

    ①一维数组:

    $arr1 = array(

      “name” => “小花”,  

      “age”=>18,

      “edu” => “大学毕业” 

    );

    ②二维数组:

    $arr1 = array(

      “name” => array(‘小花’,     ‘小芳’,   ‘小明’, );  

      “age”=> array(18,      22,       19),

      “edu” => array(“大学毕业”,  ‘中学’,    ‘小学’)

    );

    ③多维数组:

    下标形式:$v1 = 数组名[下标][下标][.....]

    数组遍历:

    foreach( $arr   as   [ $key  => ] $value ) //$key可以称为键变量,$value可以称为值变量。

    {

       这里就可以对$key  $value 进行所有可能的操作——因为他们就是一个变量

      $key 代表每次取得元素的下标,可能是数字,也可以能是字符串

      $value 代表每次取得元素的值,可能是各种类型。

      此循环结构会从数组的第一项一直遍历循环到最后一项,然后结束。

    }

    数组指针和遍历原理:

    每个数组,其内部都有一个“指针”,该指针决定了该数组当前取值的时候,取到的元素。

    foreach遍历过程中,都是依赖与该指针而进行的!

    指针除了负责foreach循环的位置设定之外,还有其他一些函数也依赖于该指针:

    1、$v1 = current( $arr1);   取得$arr1中当前指针所指向的元素的值,如果没有指向元素,则为false

    2、$v1 = key$arr1);   取得$arr1中当前指针所指向的元素的下标,。。。。。false

    3$v1 = next($arr1 )   将指针移向“下一个元素”,然后取得该下一个元素的值;

    4、$v1 = prev($arr1)   将指针移向“上一个元素”,然后取得该上一个元素的值

    5、$v1 = reset($arr1);   将指针移向“第一个元素”,然后取得该元素的值——数组指针初始化

    6、$v1 = end($arr1);   将指针移向“最后一个元素”,然后取得该元素的值

    7、$v1 = each($arr1)   取得当前元素的下标和值,然后移动指针到下一个位置。

    foreach可以有break和continue等操作;值变量默认的传值方式是值传递;遍历过程中值变量可以人为设定为引用传递

    foreach($arr as $key => &$value){ ... }

    键变量不可以设定为引用传递

    $arr2=array(5,15,3,4);

    foreach($arr as $key=>$value){

      $value*=2;

      echo "<br>$key=>$value"

    }

    echo "<br>";

    print_r($arr2);

    此时的value值:0=>10,1=>30,2=>6,3=>8;

    但数组输出为:Array( [0]=>5 [1]=>15 [2]=>3 [3]=>4) ;

    $arr2=array(5,15,3,4);

    foreach($arr as $key=>&$value){

      $value*=2;

      echo "<br>$key=>$value"

    }

    echo "<br>";

    print_r($arr2);

    此时的value值:0=>10,1=>30,2=>6,3=>8;

    但数组输出为:Array( [0]=>10 [1]=>30 [2]=>6 [3]=>8) ;

    冒泡排序:

    目标:将下列数组进行正序(从小到大)排列出来

    $arr2 = array( 5,  15,  3,  4911);

    $arr2=array(5,15,3,4,9,11);

    $len=count($arr2);  需要进行n-1次“冒泡”比较过程

    echo"<br>排序之前:";

    print_r($arr2);

    for($i=0;$i<$len-1;++$i){  设定比较次数,每次比较都比前一次次数少1,第一次比较需要比较n-1次

      for($k=0;$k<$len-1-$i;++$k){  设定本次需要比较的次数,在这里要实现下标为$k和$k+1这两项的比较

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

          $temp=$arr2[$k];

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

          $arr2[$k+1]=$temp;

        }

      }

    }

    echo"<br>排序之后:";

    print_r($arr2);

  • 相关阅读:
    简单封装的ajax请求
    mysql-8.0 安装教程(自定义配置文件,密码方式已修改)
    计算机专业术语
    mvc路由
    Chosen三级联动
    Chosen通用初始化
    .NET Core学习之路
    Sql的一些常规判断
    CORS 跨域
    SQL 的一个技巧
  • 原文地址:https://www.cnblogs.com/dns6/p/8351043.html
Copyright © 2020-2023  润新知