php中的数组

来源:互联网 发布:网络安全工程师怎么考 编辑:程序博客网 时间:2024/05/22 11:54

简介

php中的数组每个元素都是一个"键-值"对,默认情况下数组内第一个元素的键为数值0,第二个元素键为数值1,依此类推,不过,php中的数组是可以为元素指定键的。应注意是,键的类型只能是整数或字符串,不能取其他类型。

php中,数组的定义相当自由,不仅键的数据类型不需要统一,值的数据类型也不需要统一,甚至维度都不需要统一:

$a['a'] = true;$a[2] = 3;$a[1]['b'] = "abc";echo var_dump($a['a']);      // bool(true)echo var_dump($a[2]);        // int(3)echo var_dump($a[1]['b']);   // string(3) "abc"


数组定义

要定义一个数组,实际上不需要什么特殊的语法,直接定义有一个具有下标的变量并对其赋值就可以了,例如:

$arr[3] = 4;

此外,还可以使用array()函数(及简写的方括号)进行定义:

$a = array();$b = array('x1', 'x2');$c = array(1=>'x1', 'a2'=>'x2', 3=>'x3');$d = [];$e = ['x1', 'x2'];$f = [1=>'x1', 'a2'=>'x2', 3=>'x3'];echo var_dump($a);echo var_dump($b);echo var_dump($c);echo var_dump($d);echo var_dump($e);echo var_dump($f);
-----------------
array(0) {
}
array(2) {
  [0]=>
  string(2) "x1"
  [1]=>
  string(2) "x2"
}
array(3) {
  [1]=>
  string(2) "x1"
  ["a2"]=>
  string(2) "x2"
  [3]=>
  string(2) "x3"
}
array(0) {
}
array(2) {
  [0]=>
  string(2) "x1"
  [1]=>
  string(2) "x2"
}
array(3) {
  [1]=>
  string(2) "x1"
  ["a2"]=>
  string(2) "x2"
  [3]=>
  string(2) "x3"
}


$a[2]['a'] = 'sa';$a[2]['b'] = 'sb';$a[3] = 4;$b = array(array(1,2,3), array(4,5,6));  // 也可以使用=>运算符指定键名$c = [[1,5=>2,3],[3=>4,5,6]];             // 注意键名的自动分配echo var_dump($a);echo var_dump($b);echo var_dump($c);
--------------------
array(2) {
  [2]=>
  array(2) {
    ["a"]=>
    string(2) "sa"
    ["b"]=>
    string(2) "sb"
  }
  [3]=>
  int(4)
}
array(2) {
  [0]=>
  array(3) {
    [0]=>
    int(1)
    [1]=>
    int(2)
    [2]=>
    int(3)
  }
  [1]=>
  array(3) {
    [0]=>
    int(4)
    [1]=>
    int(5)
    [2]=>
    int(6)
  }
}
array(2) {
  [0]=>
  array(3) {
    [0]=>
    int(1)
    [5]=>
    int(2)
    [6]=>
    int(3)
  }
  [1]=>
  array(3) {
    [3]=>
    int(4)
    [4]=>
    int(5)
    [5]=>
    int(6)
  }

}

注意,php中数组元素的类型是不需要统一的,在本例中,数组$a的元素$a[2]是一个数组,具有['a']和['b']两个元素,而$a[3]只是一个整数。


数组的键

数组的键可以是常量或变量:

$a = 'x1';$b[$a] = 3;echo var_dump($b['x1']);     // int(3)

数组的键只能是整数(包括正数、0和负数)或字符串类型,如果是其他类型,会以以下规则自动进行转换:

1.包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。  这也意味着键1和键"1"是不能共存的,尽管键支持整数和字符串类型。

2.浮点数也会被转换为整型。

3.布尔值也会被转换成整型。true转换为1,false转换为0。 

4.null 转换为 ""。 

5.数组和对象不能被用为键名。

$a = [1=>2, '1'=>4, 'a'=>'x', false=>'y', null=>'z'];echo var_dump($a);
---------------------
array(4) {
  [1]=>
  int(4)
  ["a"]=>
  string(1) "x"
  [0]=>
  string(1) "y"
  [""]=>
  string(1) "z"
}

$a = [1,2,5=>3,4];var_export($a);
--------------------

array (
  0 => 1,
  1 => 2,
  5 => 3,
  6 => 4,
)


给数组元素赋值

如果给元素赋了值但没有给元素的键赋值时,例如"arr[] = 100;",那么默认的键为数组内最大的整数键加1,如果数组内没有正整数的键,那么默认的键为0。注意这里所使用的最大整数键名不一定当前就在数组中。它只要在上次数组重新生成索引后曾经存在过就行了。以下面的例子来说明:

$array = array(1, 2, 3, 4, 5);print_r($array);// 删除其中的所有元素:foreach ($array as $i => $value) {    unset($array[$i]);}print_r($array);// 添加一个单元,新的键名会是5而不是0$array[] = 6;print_r($array);// 重新索引:$array = array_values($array);$array[] = 7;print_r($array); 
--------------------

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Array
(
)
Array
(
    [5] => 6
)
Array
(
    [0] => 6
    [1] => 7
)

可见,重新索引后,原来键为5的值6,现在变成键0了。此外,除了中括号[]之外,也可以使用花括号{}来存取数组的元素。


如果使用下标对一个变量赋值,将会发生以下情况:

1.如果变量未定义,则定义此变量,类型为数组

2.如果变量已定义,且为数组,则向此数组修改或添加元素

3.如果变量已定义,但不是数组,则无效果

$a = "abc";$b = ["abc"];$a[2] = "def";$b[2] = "def";var_dump($a);var_dump($b);
--------------------
string(3) "abd"
array(2) {
  [0]=>
  string(3) "abc"
  [2]=>
  string(3) "def"
}


将数组元素依次赋给一组变量

可通过list()函数便捷地将一组数组元素赋给一组变量

$a = array(1,2,3,4,5,6);list(,,,$x,$y) = $a;var_dump($x);   // int(4)var_dump($y);   // int(5)


删除数组元素

数组元素可通过unset()函数从数组中移除

但unset()函数只是删除数组元素,并不会重建索引。如果需要删除后重建索引,可以再调用一次 array_values() 函数

$a[0] = 1;$a[1] = 2;$a[2] = 3;unset($a[1]);var_dump($a);
---------------------
array(2) {
  [0]=>
  int(1)
  [2]=>
  int(3)
}


常数数组

define()函数可用于定义常数数组,例如:

define('ARR', [1,2,'a']);echo var_dump(ARR);
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  string(1) "a"
}

类中同样可以使用const来定义常量数组:

class foo{  public const str = [1,2,3];}echo foo::str[0];

运算符

数组支持的运算符包括:

+、==、===、!=、<>、!==、+=


数组加法(+)

数组的加法运算将得到一个新的数组,新数组的键值为各操作数数组的键值的并集。对于同名键值,以收集到的第一个元素为有效。也就是右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。

$a = array(1, 2);$b = array(3, 4, 5, 6);$c = array(7, 8, 9);$d = ($a + $b + $c);var_dump($d);
--------------------

array(4) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(5)
  [3]=>
  int(6)
}


$a = array('a'=>1, 2);$b = array(3, 4, 5, 6);$c = array(7, 8, 'b'=>9);$d = ($a + $b + $c);var_dump($d);
--------------------
array(6) {
  ["a"]=>
  int(1)
  [0]=>
  int(2)
  [1]=>
  int(4)
  [2]=>
  int(5)
  [3]=>
  int(6)
  ["b"]=>
  int(9)
}


相等运算符(==),两个数组有相同的元素(键和值)时,结果为true

全等运算符(===),两个数组有相同的元素且顺序相同、类型也相同时结果为true

$a = array(0=>1, 1=>2);$b = array(1=>2, 0=>1);$c = array(1, 2);var_dump($a == $b);   // truevar_dump($a === $b);  // falsevar_dump($a == $c);   // truevar_dump($a === $c);  // true

不等运算符包括!=和<>,两者作用相同。





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子不老实爱动怎么办 4周孩子脾气大怎么办 老公脾气暴躁爱骂人怎么办? 当妈妈了脾气不好怎么办 父亲很坏不顾家很会赌钱怎么办 妈妈骂我很难听怎么办 父母管的太严怎么办 2岁宝宝哭闹不止怎么办 8岁儿童叛逆期怎么办 两岁宝宝叛逆期怎么办 4个月小孩哭怎么办 2个月孩子爱哭怎么办 小孩挑衅大人被大人打怎么办 在学校犯了错怎么办 孩子在学校爱捣乱怎么办 小孩老是在学校捣乱怎么办 孩子不听话每天会发火怎么办 孩子不听话控制不住发火怎么办 儿子不听话我总会发火怎么办 小孩好动精力不集中怎么办 孩子好动精力不集中怎么办 一岁半宝宝咳嗽半个月了怎么办 6岁儿童上课调皮怎么办 小孩挨揍后精神失控怎么办 孩子不听话把我胃气疼了怎么办 因为孩子不听话夫妻经常吵架怎么办 11岁儿子不听话了怎么办 二十岁的儿子还不听话怎么办 幼儿园小班幼儿不听老师的话怎么办 幼师对待不听话的孩子该怎么办 2岁宝宝不吃饭只喝奶怎么办 孩子哭着喊妈妈不睡觉怎么办 孩子晚上不睡觉一直哭怎么办 孩子不睡觉还哭怎么办 孩子晚上不睡觉老哭怎么办? 4岁宝宝叛逆期怎么办 驾考紧张脚抖怎么办 驾考科目三紧张怎么办 孩子不自信容易紧张怎么办 在人多时候紧张怎么办 考科目二很紧张怎么办