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():获取数组的所有值,返回值也是一个索引数组。
原文地址:https://www.cnblogs.com/seintf/p/14160780.html