PHP数组

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)

总结

  1. echo不能打印数组,print_r看数组;
  2. PHP下标:数字/字符串都行;
  3. 下标重复,后覆盖前
  4. 不写下标:取前面最大数字下标 +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,不能混用。

读取数组单元的写法总结

想要读取数组里的值,依靠索引(键)

  1. 数字索引:$arr[10]
  2. 字符串索引:$arr['name'](单/双引号均可,不能省略引号
  3. 不带引号:$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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注