array() 函数是PHP中用于创建数组的核心函数。数组是PHP中最重要的数据结构之一,用于存储多个值在一个变量中。掌握array()函数的使用是PHP编程的基础。
在PHP中,数组是一种强大的数据结构,可以存储多个值。PHP支持三种主要类型的数组:
array(value1, value2, value3, ...);
[value1, value2, value3, ...];
提示: 自PHP 5.4起,可以使用短数组语法 [] 代替 array(),这使代码更简洁易读。
数值数组是最基本的数组类型,使用数字作为键,键值从0开始自动分配。
<?php
// 使用 array() 函数创建数值数组
$fruits = array("苹果", "香蕉", "橙子", "芒果");
echo $fruits[0] . ", " . $fruits[1] . ", " . $fruits[2] . ", " . $fruits[3];
// 输出: 苹果, 香蕉, 橙子, 芒果
// 使用短数组语法创建数值数组
$colors = ["红色", "绿色", "蓝色"];
echo $colors[0] . ", " . $colors[1] . ", " . $colors[2];
// 输出: 红色, 绿色, 蓝色
// 逐个添加元素
$numbers = array();
$numbers[0] = 10;
$numbers[1] = 20;
$numbers[2] = 30;
// 等同于: $numbers = [10, 20, 30];
// 使用自动索引
$autoIndex = array();
$autoIndex[] = "第一个元素"; // 索引 0
$autoIndex[] = "第二个元素"; // 索引 1
$autoIndex[] = "第三个元素"; // 索引 2
// 混合数据类型
$mixed = array(1, "文本", 3.14, true);
echo $mixed[0] . " - " . $mixed[1] . " - " . $mixed[2] . " - " . $mixed[3];
// 输出: 1 - 文本 - 3.14 - 1
?>
关联数组使用自定义的字符串键来访问元素,适用于需要键值对数据的场景。
<?php
// 使用 array() 函数创建关联数组
$person = array(
"name" => "张三",
"age" => 25,
"city" => "北京"
);
echo $person["name"] . " - " . $person["age"] . " - " . $person["city"];
// 输出: 张三 - 25 - 北京
// 使用短数组语法创建关联数组
$car = [
"brand" => "丰田",
"model" => "凯美瑞",
"year" => 2023
];
echo $car["brand"] . " " . $car["model"] . " (" . $car["year"] . ")";
// 输出: 丰田 凯美瑞 (2023)
// 逐个添加元素
$student = array();
$student["name"] = "李四";
$student["grade"] = "A";
$student["score"] = 95;
// 混合键类型 (不推荐,但PHP允许)
$mixedKeys = array(
"name" => "王五",
0 => "索引0的值",
"1" => "字符串键1的值"
);
?>
<?php
// 配置信息存储
$config = [
"database" => [
"host" => "localhost",
"user" => "root",
"password" => "123456",
"dbname" => "myapp"
],
"app" => [
"name" => "我的应用",
"version" => "1.0.0",
"debug" => true
]
];
echo "数据库主机: " . $config["database"]["host"];
echo "应用名称: " . $config["app"]["name"];
// 表单数据处理
$formData = [
"username" => "john_doe",
"email" => "john@example.com",
"password" => "secure_password",
"remember_me" => true
];
// 多语言支持
$lang = [
"welcome" => "欢迎访问我们的网站",
"login" => "登录",
"logout" => "退出",
"search" => "搜索"
];
echo $lang["welcome"];
?>
多维数组是包含一个或多个数组的数组,用于存储复杂的数据结构。
<?php
// 二维数值数组
$matrix = array(
array(1, 2, 3),
array(4, 5, 6),
array(7, 8, 9)
);
echo $matrix[0][1]; // 输出: 2
echo $matrix[1][2]; // 输出: 6
// 二维关联数组
$students = [
[
"name" => "张三",
"age" => 20,
"grades" => [85, 90, 78]
],
[
"name" => "李四",
"age" => 22,
"grades" => [92, 88, 95]
],
[
"name" => "王五",
"age" => 21,
"grades" => [76, 85, 80]
]
];
echo $students[0]["name"] . "的年龄是" . $students[0]["age"];
echo ",数学成绩:" . $students[0]["grades"][0];
// 更复杂的多维数组
$company = [
"name" => "ABC科技有限公司",
"departments" => [
"development" => [
"manager" => "张经理",
"employees" => ["程序员A", "程序员B", "程序员C"]
],
"sales" => [
"manager" => "李经理",
"employees" => ["销售A", "销售B"]
]
]
];
echo $company["departments"]["development"]["manager"];
echo $company["departments"]["sales"]["employees"][0];
?>
PHP提供了多种方式来遍历数组,每种方式适用于不同的场景。
<?php
// 关联数组
$age = array("Peter" => "35", "Ben" => "37", "Joe" => "43");
// 1. foreach 循环 (最常用)
foreach($age as $name => $age_value) {
echo "Key=" . $name . ", Value=" . $age_value;
echo "<br>";
}
// 2. 只遍历值
foreach($age as $age_value) {
echo "Age: " . $age_value . "<br>";
}
// 3. for 循环 (适用于数值数组)
$fruits = array("苹果", "香蕉", "橙子");
for($i = 0; $i < count($fruits); $i++) {
echo $fruits[$i] . "<br>";
}
// 4. while + each + list (PHP 7.2+ 已废弃,了解即可)
// reset($age);
// while(list($name, $age_value) = each($age)) {
// echo "$name is $age_value years old.<br>";
// }
// 5. 使用 array_walk 函数
function printItem($value, $key) {
echo "$key: $value<br>";
}
array_walk($age, 'printItem');
// 遍历多维数组
$employees = [
["name" => "张三", "department" => "技术部"],
["name" => "李四", "department" => "销售部"],
["name" => "王五", "department" => "市场部"]
];
foreach($employees as $employee) {
echo "姓名: " . $employee["name"] . ", 部门: " . $employee["department"] . "<br>";
}
?>
<?php
// 1. 使用 range() 函数创建数值序列
$numbers = range(1, 10); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
$letters = range('a', 'e'); // ['a', 'b', 'c', 'd', 'e']
// 2. 使用 array_fill() 填充数组
$filled = array_fill(0, 5, 'default'); // [0=>'default', 1=>'default', ...]
// 3. 从字符串创建数组
$string = "apple,banana,orange";
$fruits = explode(",", $string); // ['apple', 'banana', 'orange']
// 4. 使用 compact() 从变量创建关联数组
$name = "张三";
$age = 25;
$city = "北京";
$person = compact('name', 'age', 'city');
// 5. 使用 array_combine() 合并键和值
$keys = ['name', 'age', 'city'];
$values = ['李四', 30, '上海'];
$combined = array_combine($keys, $values);
// 6. 快速创建配置数组
$config = array(
'database.host' => 'localhost',
'database.user' => 'root',
'app.debug' => true,
'app.name' => 'My App'
);
// 7. 使用 splat 操作符 (...) 合并数组 (PHP 5.6+)
$array1 = [1, 2, 3];
$array2 = [4, 5, 6];
$merged = [...$array1, ...$array2]; // [1, 2, 3, 4, 5, 6]
?>
<?php
// 用户数据管理
$users = [
[
'id' => 1,
'username' => 'john_doe',
'email' => 'john@example.com',
'profile' => [
'firstName' => 'John',
'lastName' => 'Doe',
'age' => 28
],
'preferences' => [
'theme' => 'dark',
'language' => 'zh-CN',
'notifications' => true
]
],
[
'id' => 2,
'username' => 'jane_smith',
'email' => 'jane@example.com',
'profile' => [
'firstName' => 'Jane',
'lastName' => 'Smith',
'age' => 32
],
'preferences' => [
'theme' => 'light',
'language' => 'en-US',
'notifications' => false
]
]
];
// 查找特定用户
function findUserById($users, $id) {
foreach($users as $user) {
if($user['id'] === $id) {
return $user;
}
}
return null;
}
$user = findUserById($users, 1);
if($user) {
echo "找到用户: " . $user['username'];
echo ",邮箱: " . $user['email'];
echo ",主题: " . $user['preferences']['theme'];
}
?>
<?php
// 商品目录系统
$products = [
'electronics' => [
[
'id' => 'E001',
'name' => '智能手机',
'price' => 2999.00,
'specs' => ['屏幕: 6.1英寸', '内存: 8GB', '存储: 128GB'],
'inStock' => true
],
[
'id' => 'E002',
'name' => '笔记本电脑',
'price' => 5999.00,
'specs' => ['CPU: i7', '内存: 16GB', '存储: 512GB SSD'],
'inStock' => false
]
],
'books' => [
[
'id' => 'B001',
'name' => 'PHP编程指南',
'price' => 89.00,
'author' => '张教授',
'inStock' => true
],
[
'id' => 'B002',
'name' => 'Web开发实战',
'price' => 76.00,
'author' => '李专家',
'inStock' => true
]
]
];
// 显示所有商品
foreach($products as $category => $items) {
echo "<h3>" . ucfirst($category) . "</h3>";
foreach($items as $product) {
echo "商品ID: " . $product['id'] . "<br>";
echo "名称: " . $product['name'] . "<br>";
echo "价格: ¥" . number_format($product['price'], 2) . "<br>";
echo "库存: " . ($product['inStock'] ? "有货" : "缺货") . "<br><br>";
}
}
// 计算总商品数量
$totalProducts = 0;
foreach($products as $category => $items) {
$totalProducts += count($items);
}
echo "总商品数量: " . $totalProducts;
?>
| 返回值: | 返回参数的数组。如果没有参数,则返回一个空数组。 |
|---|---|
| PHP 版本: | 4+ |
| 更新日志: |
|
[],代码更简洁isset() 或 array_key_exists() 检查键是否存在<?php
$user = [
'name' => '张三',
'email' => 'zhangsan@example.com'
];
// 不安全的访问方式
// echo $user['age']; // 会产生 Notice: Undefined index
// 安全的访问方式
if(isset($user['age'])) {
echo $user['age'];
} else {
echo "年龄未设置";
}
// 使用空值合并运算符 (PHP 7+)
$age = $user['age'] ?? '未知';
echo "年龄: " . $age;
// 使用 array_key_exists()
if(array_key_exists('email', $user)) {
echo "邮箱: " . $user['email'];
}
// 多层数组的安全访问
$config = [
'database' => [
'host' => 'localhost'
]
];
$host = $config['database']['host'] ?? '127.0.0.1';
$port = $config['database']['port'] ?? '3306';
echo "数据库连接: $host:$port";
?>
[]