PHP 数组是有序映射:键(Key)→ 值(Value)。键可以是整数(索引数组)或字符串(关联数组),可混合。值可以是任意类型,包括数组(多维)。
<?php
// 索引数组(键自动 0,1,2...)
$fruits = ['apple', 'banana', 'orange'];
// 等同于
$fruits = array('apple', 'banana', 'orange');
// 关联数组
$person = [
'name' => 'Alice',
'age' => 25,
'city' => 'Tokyo',
];
// 混合键
$mixed = [
10 => 'ten',
'key' => 'value',
20 => 'twenty',
];
<?php
$arr = [];
$arr[0] = 'first';
$arr[1] = 'second';
$arr['name'] = 'Bob';
// 数组大小动态增长,无需预定义大小
<?php
$nums = range(1, 10); // [1,2,...,10]
$letters = range('a', 'f'); // ['a','b','c','d','e','f']
$zeros = array_fill(0, 5, 0); // [0,0,0,0,0]
$pairs = array_fill_keys(['a','b','c'], 'default'); // ['a'=>'default', 'b'=>'default', 'c'=>'default']
<?php
$person = ['name'=>'Alice', 'age'=>25];
// 读取
echo $person['name']; // Alice
echo $person['gender'] ?? 'unknown'; // 安全读取,提供默认值
// 修改/新增
$person['age'] = 26;
$person['email'] = 'alice@example.com';
// 删除
unset($person['age']);
<?php
$matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
];
echo $matrix[1][2]; // 6 (第2行第3列)
<?php
$users = [
'alice' => ['age'=>25, 'roles'=>['admin','editor']],
'bob' => ['age'=>30, 'roles'=>['user']],
];
echo $users['alice']['roles'][0]; // admin
// 数据库结果集风格
$records = [
['id'=>1, 'title'=>'Post 1', 'tags'=>['php','tutorial']],
['id'=>2, 'title'=>'Post 2', 'tags'=>['js','vue']],
];
<?php
$appData = [
'users' => [
['id'=>1, 'name'=>'Alice'],
['id'=>2, 'name'=>'Bob'],
],
'posts' => [
['id'=>101, 'user_id'=>1, 'title'=>'Hello'],
['id'=>102, 'user_id'=>2, 'title'=>'World'],
],
'settings' => [
'site_name' => 'My Blog',
'per_page' => 10,
],
];
// 访问
echo $appData['posts'][0]['title']; // Hello
| 需求 | 函数/语法 | 示例 |
|---|---|---|
| 获取长度 | count($arr) | count($fruits) → 3 |
| 检查键存在 | array_key_exists($key, $arr) | array_key_exists('age', $person) |
| 检查值存在 | in_array($val, $arr) | in_array('apple', $fruits) |
| 获取所有键 | array_keys($arr) | array_keys($person) → ['name','age','city'] |
| 获取所有值 | array_values($arr) | 重新索引为 0,1,2... |
| 翻转键值 | array_flip($arr) | 值必须唯一且为字符串/整数 |
| 合并数组 | array_merge($a, $b) / $a + $b | merge 重新索引数字键,+ 保留首次出现键 |
| 提取列 | array_column($arr, 'col', 'key') | 从记录集提取某字段组成新数组 |
| 打印调试 | print_r($arr) / var_dump($arr) | 开发调试必备 |
<?php
$data = ['a'=>1, 'b'=>2, 'c'=>3];
// 1. foreach (最常用、最快)
foreach ($data as $k => $v) { echo "$k=$v\n"; }
// 2. for + array_keys (需索引控制)
$keys = array_keys($data);
for ($i=0; $i $v) { ... }
PHP 数组是「瑞士军刀」:既是列表、字典、集合、栈、队列、树。掌握 [] 声明、动态键赋值、多维嵌套、核心操作函数(array_column, array_merge, array_keys)、遍历方式,即可应对 99% 的数据结构需求。记住:数组即映射,键值任意,极其灵活。