1. 什么是PHP数组
数组可以存放多个值(整数、字符串等),也可以空数组(一个元素都没有)。
$arr = array(1,2,3);
Code language: PHP (php)
注意:不能用echo打印数组,要用
print_r(数组变量)查看数组结构
print_r($arr);
Code language: PHP (php)
2. PHP数组索引(下标)
PHP的下标非常灵活:可以是数字、字符串,混合使用也支持。
其他语言(JS/C)下标一般固定从0开始;PHP不一样。
$arr = array(10=>'张学友','周星驰','name'=>"周润发");
Code language: PHP (php)
3. 下标重复,后面覆盖前面
同一个下标写多次,后面元素会覆盖前面,前面的值丢失。
$arr = array(12 => "张家辉", 12 => "张学友",'周星驰','name'=>"周润发");
// 结果:[12]=>张学友,张家辉被覆盖,不会输出
Code language: PHP (php)
4. 不指定下标时,自动分配下标
没有手动写下标的元素,下标 = 它前面所有数字下标里的最大值 +1
$arr = array(16 => "张家辉", 12 => "张学友",'周星驰','name'=>"周润发");
// 前面最大数字下标是16,所以'周星驰'下标 = 16+1 =17
Code language: PHP (php)
- 连续多个无下标元素:依次继续+1
$arr = array(16 => "张家辉", 12 => "张学友",'周星驰','吴京','name'=>"周润发",30 => "梁家辉");
// 周星驰=17,吴京=18
Code language: PHP (php)
- 后面再手动指定更大数字下标,不会影响前面无下标元素
$arr = array(16 => "张家辉", 12 => "张学友",'周星驰','name'=>"周润发",30 => "梁家辉");
// 周星驰下标依旧是17,后面单独写30不会改变前面
Code language: PHP (php)
5. 合并两条规则
如果数组定义里,后面出现重复数字下标,依然触发覆盖;无下标的元素依旧按「前面最大数字下标+1」分配。
$arr = array(16 => "张家辉", 12 => "张学友",'周星驰','name'=>"周润发",16 => "梁家辉");
// [16]被覆盖成梁家辉,周星驰下标是17
Code language: PHP (php)
总结
- echo不能打印数组,print_r看数组;
- PHP下标:数字/字符串都行;
- 下标重复,后覆盖前;
- 不写下标:取前面最大数字下标 +1;连续多个依次累加。
PHP 无规律数字索引规则
如果数组部分单元手动指定数字索引,剩下没有写索引的元素,会自动取前面出现过最大的数字索引值 +1,作为当前元素的索引。
示例:
$arr = [
5 => 'a',
'b', // 前面最大索引是5,自动分配 6
9 => 'c',
'd' // 前面最大索引是9,自动分配 10
];
Code language: PHP (php)
数组单元取值
- 数字索引:直接写数字,
$arr[10] - 字符串索引(关联键):必须加引号
$arr['name']- 漏写引号
$arr[name],PHP 会把name当成常量去解析,引发错误。重点:字符串键和数字键互相独立。如果数组只有字符串键,直接用不存在的数字索引读取(如$arr[19]),会报Undefined offset:19,不能混用。
- 漏写引号
读取数组单元的写法总结
想要读取数组里的值,依靠索引(键):
- 数字索引:
$arr[10] - 字符串索引:
$arr['name'](单/双引号均可,不能省略引号) - 不带引号:
$arr[name]→ PHP 将name识别为常量,是错误写法。
$_POST 超级全局变量
$_POST 是PHP超级全局数组,用来接收表单 method="post" 提交过来的数据。
print_r($_POST);可以打印整个POST数组,查看所有提交的表单字段
print_r($_POST);
// 输出样例
// Array ( [title] => xxx [content] => xxx [username] => xxx )
Code language: PHP (php)
表单提交的name属性,就是$_POST数组的键名。 例:表单<input name="username">,后端取值:$_POST['username']
小练习
<?php
$test = [
3 => '苹果',
'香蕉',
7 => '橙子',
'葡萄'
];
print_r($test);
/*
输出:
Array
(
[3] => 苹果
[4] => 香蕉
[7] => 橙子
[8] => 葡萄
)
*/
?>
Code language: HTML, XML (xml)
Previous: PHP 函数和超级全局数组