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
不等运算符包括!=和<>,两者作用相同。
- php 中的数组(笔记)
- PHP中的数组函数
- PHP 中的数组
- php中的数组合并
- PHP中的数组
- PHP中的数组指针
- PHP中的数组
- PHP中的数组
- php中的关联数组
- php中的数组遍历
- php中的数组
- PHP中的数组总结
- PHP中的数组函数
- php 中的数组
- php 中的数组类型
- PHP中的数组
- php中的数组
- php中的数组
- Python-CodeWars-17-11-26
- 【Scikit-Learn 中文文档】流形学习
- CSS background-position属性
- java内部类
- Android的mipmap和drawable的区别和使用
- php中的数组
- MediaCodec基础入门
- MyBatis之全局配置文件(Configuration XML)之typeAliases别名
- 欢迎使用CSDN-markdown编辑器
- Go基础
- Myeclipse2016在线安装svn,本地安装
- java异常处理技术
- linux系统中登录深澜有线校园网方法(不用下载客户端)
- 小知识汇总