数组基础 #

一、数组概述 #

PHP数组是一种有序映射,可以存储多个值,支持数字索引和字符串键。

1.1 数组特点 #

  • 可以存储任意类型的值
  • 支持数字索引和字符串键
  • 动态大小,无需预先声明
  • 支持多维嵌套

二、创建数组 #

2.1 使用array() #

php
<?php
$numbers = array(1, 2, 3, 4, 5);
$user = array('name' => 'John', 'age' => 25);

2.2 使用短语法[] #

php
<?php
$numbers = [1, 2, 3, 4, 5];
$user = ['name' => 'John', 'age' => 25];

2.3 空数组 #

php
<?php
$empty1 = array();
$empty2 = [];

三、索引数组 #

3.1 创建索引数组 #

php
<?php
$fruits = ['apple', 'banana', 'cherry'];
$numbers = [1, 2, 3, 4, 5];
$mixed = [1, 'hello', true, null, [1, 2]];

3.2 访问元素 #

php
<?php
$fruits = ['apple', 'banana', 'cherry'];

echo $fruits[0];
echo $fruits[1];
echo $fruits[2];

3.3 修改元素 #

php
<?php
$fruits = ['apple', 'banana', 'cherry'];

$fruits[1] = 'blueberry';
print_r($fruits);

3.4 添加元素 #

php
<?php
$fruits = ['apple', 'banana'];

$fruits[] = 'cherry';
$fruits[] = 'date';

print_r($fruits);

3.5 自定义索引 #

php
<?php
$arr = [
    5 => 'five',
    10 => 'ten',
    'hello'
];

print_r($arr);

四、关联数组 #

4.1 创建关联数组 #

php
<?php
$user = [
    'name' => 'John',
    'age' => 25,
    'city' => 'Beijing'
];

$config = [
    'host' => 'localhost',
    'port' => 3306,
    'database' => 'myapp'
];

4.2 访问元素 #

php
<?php
$user = ['name' => 'John', 'age' => 25];

echo $user['name'];
echo $user['age'];

4.3 修改元素 #

php
<?php
$user = ['name' => 'John', 'age' => 25];

$user['age'] = 26;
$user['city'] = 'Shanghai';

print_r($user);

4.4 添加元素 #

php
<?php
$user = ['name' => 'John'];

$user['age'] = 25;
$user['city'] = 'Beijing';

print_r($user);

五、混合数组 #

5.1 创建混合数组 #

php
<?php
$mixed = [
    0 => 'first',
    'name' => 'John',
    1 => 'second',
    'age' => 25,
    'hobbies' => ['reading', 'gaming']
];

print_r($mixed);

5.2 访问混合数组 #

php
<?php
echo $mixed[0];
echo $mixed['name'];
echo $mixed['hobbies'][0];

六、多维数组 #

6.1 二维数组 #

php
<?php
$users = [
    ['name' => 'John', 'age' => 25],
    ['name' => 'Jane', 'age' => 30],
    ['name' => 'Bob', 'age' => 35]
];

echo $users[0]['name'];
echo $users[1]['age'];

6.2 关联多维数组 #

php
<?php
$company = [
    'name' => 'Tech Corp',
    'departments' => [
        'engineering' => [
            'head' => 'Alice',
            'count' => 50
        ],
        'marketing' => [
            'head' => 'Bob',
            'count' => 20
        ]
    ]
];

echo $company['name'];
echo $company['departments']['engineering']['head'];

6.3 矩阵 #

php
<?php
$matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

echo $matrix[0][0];
echo $matrix[1][2];

七、数组操作 #

7.1 获取长度 #

php
<?php
$arr = [1, 2, 3, 4, 5];

echo count($arr);
echo sizeof($arr);

7.2 检查元素存在 #

php
<?php
$user = ['name' => 'John', 'age' => 25];

var_dump(isset($user['name']));
var_dump(isset($user['city']));
var_dump(array_key_exists('age', $user));

7.3 检查值存在 #

php
<?php
$fruits = ['apple', 'banana', 'cherry'];

var_dump(in_array('banana', $fruits));
var_dump(in_array('grape', $fruits));
var_dump(in_array('Banana', $fruits));
var_dump(in_array('Banana', $fruits, true));

7.4 删除元素 #

php
<?php
$fruits = ['apple', 'banana', 'cherry'];

unset($fruits[1]);
print_r($fruits);

$user = ['name' => 'John', 'age' => 25];
unset($user['age']);
print_r($user);

7.5 获取键和值 #

php
<?php
$user = ['name' => 'John', 'age' => 25];

$keys = array_keys($user);
$values = array_values($user);

print_r($keys);
print_r($values);

八、数组解构 #

8.1 索引数组解构 #

php
<?php
[$a, $b, $c] = [1, 2, 3];
echo "$a, $b, $c";

list($x, $y, $z) = [10, 20, 30];
echo "$x, $y, $z";

8.2 跳过元素 #

php
<?php
[, $second, , $fourth] = [1, 2, 3, 4, 5];
echo "$second, $fourth";

8.3 关联数组解构 #

php
<?php
['name' => $name, 'age' => $age] = ['name' => 'John', 'age' => 25];
echo "$name, $age";

8.4 嵌套解构 #

php
<?php
$user = [
    'name' => 'John',
    'address' => [
        'city' => 'Beijing',
        'country' => 'China'
    ]
];

['name' => $name, 'address' => ['city' => $city]] = $user;
echo "$name lives in $city";

九、数组展开 #

9.1 展开运算符 #

php
<?php
$a = [1, 2, 3];
$b = [4, 5, 6];

$merged = [...$a, ...$b];
print_r($merged);

$extended = [0, ...$a, 3.5, ...$b, 7];
print_r($extended);

9.2 函数参数展开 #

php
<?php
function add(int $a, int $b, int $c): int
{
    return $a + $b + $c;
}

$args = [1, 2, 3];
echo add(...$args);

9.3 合并关联数组 #

php
<?php
$defaults = ['timeout' => 30, 'retries' => 3];
$options = ['timeout' => 60, 'debug' => true];

$config = [...$defaults, ...$options];
print_r($config);

十、数组转换 #

10.1 数组转字符串 #

php
<?php
$fruits = ['apple', 'banana', 'cherry'];

$str = implode(', ', $fruits);
echo $str;

10.2 字符串转数组 #

php
<?php
$str = 'apple,banana,cherry';

$arr = explode(',', $str);
print_r($arr);

10.3 对象转数组 #

php
<?php
class User
{
    public $name = 'John';
    public $age = 25;
}

$user = new User();
$arr = (array) $user;
print_r($arr);

10.4 JSON转换 #

php
<?php
$user = ['name' => 'John', 'age' => 25];

$json = json_encode($user);
echo $json;

$decoded = json_decode($json, true);
print_r($decoded);

十一、实际应用 #

11.1 配置数组 #

php
<?php
$config = [
    'database' => [
        'host' => 'localhost',
        'port' => 3306,
        'name' => 'myapp',
        'user' => 'root',
        'pass' => ''
    ],
    'cache' => [
        'enabled' => true,
        'ttl' => 3600
    ],
    'debug' => false
];

11.2 表单数据 #

php
<?php
$formData = [
    'username' => $_POST['username'] ?? '',
    'email' => $_POST['email'] ?? '',
    'password' => $_POST['password'] ?? '',
    'confirm_password' => $_POST['confirm_password'] ?? ''
];

11.3 API响应 #

php
<?php
function jsonResponse(array $data, int $status = 200): string
{
    http_response_code($status);
    header('Content-Type: application/json');
    return json_encode($data);
}

$response = [
    'success' => true,
    'data' => [
        'users' => [
            ['id' => 1, 'name' => 'John'],
            ['id' => 2, 'name' => 'Jane']
        ]
    ],
    'meta' => [
        'total' => 2,
        'page' => 1
    ]
];

echo jsonResponse($response);

十二、总结 #

本章学习了:

  • 数组的创建方式
  • 索引数组和关联数组
  • 多维数组
  • 数组操作
  • 数组解构
  • 数组展开
  • 数组转换

下一章将学习数组操作。

最后更新:2026-03-26