• PHP基础03---数组


    数组

    ​ 不妨先看一下度娘的解释

    定义语法

    <?php
    //1.用array关键字
        $变量 = array(元素1,元素2,元素3);//元素可以为不同类型
    //2.用中括号
        $变量 = [元素1,元素2,元素3];
    //3.隐形定义数组:(给变量增加一个中括号,系统自动变成数组
        $变量[] = 值;//从0开始默认储存,但是如果前面有下标了,下标默认从当前前面最大的开始
        $变量[下标] = 值;//下表可以是字母(单词)/数字
    
    	$a[] = 10;
    	$a[10] = 11;
    	$a[] = 12;//这时候下标在11 
    

    特点

    • 1.可以用整数下标或字符串下标。

      如果下标都为整数下标:‘索引数组’

      如果下标都为字符串(加引号):'关联数组'(类似python中的dict?

    • 2.不同下标可以混合存在(混合数组

    • 3.数组元素的顺序以放入顺序为准,跟下标无关

      就是输出的时候,如果不循环,就按着赋值顺序输出。(var_dump($a)

    • 4.数组下标的自增长特性:从0开始自动增长,如果中间出现较大的下标,从最大的下标+1重新开始增长

    • 5.特殊值下标的自动转换

      特殊下标转换.PNG
    • 6.php中数组元素没有类型限制

    • 7.php中数组元素原则上没有长度限制

    注意:PHP中数组是很大的数据,存储位置是堆区,为当前数组分配连续的内存。

    多维数组

    ​ 数组里面的元素又是数组。

    二维数组:

    ​ 数组中所有元素都是一维数组。

    <?php
        $aa = array(
    		array('name' => 'ghj','score' => 99),
        	array('name' => 'gc','score' => 99),
        	array('name' => 'guz','score' => 0)
        );
    //其实就是套起来用。(不妨自己输出试试
    

    通常二维数组不会两个维度的下标都是数字,一般是一维为数字(无意义),二维为字符串(数据库表字段)。

    多维数组:

    ​ 在二维里面继续套娃(php中没有维度限制,但是php本质没有二维数组。 禁止套娃 (尽量少用大于三维的数组。

    异形数组(不规则数组:

    ​ 数组中的元素不规则,有普通基本变量也有数组。(可能就是啥玩意都有?)

    (开发中不常见。应该尽量让数组元素规则化,便于访问

    数组遍历

    ​ 普通数组数据的访问都是通过下标来访问。如果依次输出,就能用foreach;(下标不规则通通用foreach

    foreach

    <?php
        $a = array(0 => array('name') => 'ghj'),1 => array('name' => 'gc');
    //访问一维元素:
    	$a[0];
    //访问二维元素:(像c语言一样
    	$a[0]['name'];
    
    /*foreach遍历语法:
    	foreach($数组变量 as [$下标 => ]$值){
            //通过 $下标 访问元素的下标;通过 $值 来访问元素值
        }
    如果是关联数组的时候,就需要下标。
    如果是索引数组,就直接访问值(可以不要下标
    */
    	$aa = array(1,2,3,4,5,6,7,8,9,10);
    	foreach($aa as $key => $value){
            //$key,$value写成啥都行
            //其中$key对应下标,$value对应值
            echo $value,'<br/>';
        }
    
    //遍历二维数组
    	$bb = array(
        	array('name' => 'ghj','score' => 99),
        	array('name' => 'gc','score' => 99),
        	array('name' => 'guz','score' => 0)
        );
    	foreach($bb as $val){
            //1.foreach($val as $value)
            /*2.直接通过下标访问 
            echo $val['name'],' ',$val['score'];*/
        }
    

    foreach遍历原理:

    ​ 数组内部有一颗指针,默认指向第一个元素。foreach是利用指针去获取数据,同时移动指针。(指针访问

    1. foreach会重置指针:让指针指向第一个元素
    2. 进入foreach循环:通过指针取得第一个元素,然后将下标取出放到对应的下标变量中(存在的话),将值取出来放到对应的值变量中。指针下移

    (对于上面的一维数组遍历就是下标放到$key,值放到$value

    1. 进入到循环体之后,开始执行。
    2. 重复2,3,直到取不到内容。

    for

    ​ 就是用for循环(很少用到

    该怎么做?

    首先要确保数组元素的下标是有规律有顺序的数字。

    要获取数组长度:count(数组)来得到数组长度

    <?php
        $a = array(1,2,3,4,5,6,7,8,9);
    	$len = count($a);
    	for($i = 0;$i < len;$i++){
            echo 'key is :',$i,' val is :',$a[$i],'<br/>';
        }
    

    while配合each和list遍历数组

    (其实也可以用for。

    ​ each函数:each能够从一个数组中获取当前数组指针指向元素的下标和值,拿到之后将数组指针下移,同时返回拿到的元素下标和值以一个四个元素的数组返回。

    (each函数貌似弃用了,但是还是有可能会接触到的

    each函数.PNG

    当each取不到东西的时候,会返回false。(var_dump可显示

    ​ list函数:list是一种结构,没有返回值的概念。list提供一堆变量去从一个数组中取得元素值,然后依次存储到对应的变量中。(list必须从索引数组中去获取数据,必须从0开始。

    (整段建议细读,应该不难理解)

    list()里面的变量不可多于数组元素。(只能按顺序来,下面面的赋值如果改为```list((first,)second) = $arr;``是不可行的(因为数组中第二个是赋值的a[2]。

    list函数.PNG

    list 与each配合:

    (一定注意理解两个函数的意思与用法

    ​ each一定有两个元素:0和1

    list(变量1,变量2) = each(数组);//是一种赋值运算,但是可以得到false结果(each取到不正确的),此时表达式为false

    <?php
        $a = array(1,'name' => 'ghj',3,'score' => 99);
    	while(each($a)){
            list($key,$value) = each($a);
            echo 'key is :',$key,' value is :',$value,'<br/>';
        }
    //注意each每次使用之后都会将指针下移!
    //这时候只能输出第二个和第四个
    
    //像下面这样写就可以将四个都输出:
    	while(list($key,$value) = each($a)){
            echo 'key is :',$key,' value is :',$value,'<br/>';
        }
    //该怎么理解呢?按我的理解来看就是each没有取到空的时候的返回值都是true,就都可以执行。
    

    数组相关函数

    ​ 所有的函数,详见此处

    1.排序函数:

    (按ascii来进行比较 详情可见此处

    • sort():升序排序。(下标会重置。

    • rsort():降序排序。

    • asort():按照元素的值进行升序排序。(下标会保留)(主要应用于关联数组

    • arsort():降序排序

    怎么来解释呢,就比如说这样(注意看下标

    <?php
    $a = array(1,10,2,45,30);
    /*
    sort($a)后会得到这样的结果
    [0] => 1
    [1] => 2
    [2] => 10
    [3] => 30
    [4] => 45
    */
    
    /*
    而asort($a)之后则是这样的结果
    [0] => 1
    [2] => 2
    [1] => 10
    [4] => 30
    [3] => 45
    */
    
    
    • ksort():按照键名进行升序排序(应用于关联数组
    • krsort():降序排序。
    • shuffle():随机打乱数组的值。

    2.指针函数:

    建议自己尝试一下 详见此处

    • reset():重置指针,将数组指针回到首位
    • end():重置指针,将数组指针指到最后一个元素
    • next():指针下移,取得下一个元素的值
    • prev():指针上移,取得上一个元素的值
    • current():取得当前指针对应的元素值
    • key():取得当前指针对应的下标值

    注意:当next/prev函数使得指针越界之后,用这两个是调用不回来的,需要用end/reset重置

    3.其他函数

    • count():统计数组中元素数量(或者说长度?
    • array_push(数组,元素):在数组尾部新加入一个元素
    • array_pop(数组,元素):从数组尾部返回并删除一个元素。(这两个操作可理解成栈?
    • array_shift(数组,元素):从数组头部返回并删除一个元素。
    • array_unshift(数组,元素,):从数组头部加入一个元素(这两个可以理解成队列?
    • array_reverse():翻转数组元素
    • in_array():判断元素是否在数组中。
    • array_keys():获取数组的所有下标,返回值为一个索引数组
    • array_values():获取数组的所有值,返回值也是一个索引数组。
  • 相关阅读:
    Hadoop源代码分析(五)
    使用Solr Data Import的deltaimport功能
    hbasewriter
    Hadoop源代码分析(四)
    lucene .NET 搜索图片 功能实现
    char类型与string类型的区别
    Windows程序设计:'SM_ MOUSEWHEELPRESENT' : undeclared identifier解决办法
    汇编里的栈空间
    在汇编源程序中,数据不能以字母开头
    中值
  • 原文地址:https://www.cnblogs.com/seintf/p/14160780.html
Copyright © 2020-2023  润新知