在PHP中,数组(Array)是最常用的数据结构之一,用于存储和操作数据。以下是PHP网站开发中常见的数组处理方法,包括基础操作、高级技巧和性能优化。

1. 数组基础操作

1.1 创建数组

php

// 索引数组

$indexedArray = [1, 2, 3];

$indexedArray2 = array('', 'banana', 'orange');

// 关联数组

$assocArray = [

'name' => 'John',

'age' => 30,

'email' => 'john@example.com'

// 多维数组

$multiArray = [

['id' => 1, 'name' => 'Alice'],

['id' => 2, 'name' => 'Bob']

1.2 添加/删除元素

php

$fruits = ['apple', 'banana'];

// 添加元素

$fruits[] = 'orange'; // 末尾添加

array_push($fruits, 'grape', 'mango'); // 添加多个

// 删除元素

unset($fruits[1]); // 删除索引1(banana)

array_pop($fruits); // 删除最后一个元素

array_shift($fruits); // 删除第一个元素

1.3 遍历数组

php

$users = [

['id' => 1, 'name' => 'Alice'],

['id' => 2, 'name' => 'Bob']

// foreach 遍历

foreach ($users as $user) {

echo $user['name'] . "\n";

// for 遍历(仅索引数组)

for ($i = 0; $i < count($users); $i++) {

echo $users[$i]['name'] . "\n";

2. 常用数组函数

2.1 搜索与过滤

php

$numbers = [1, 2, 3, 4, 5];

// 检查值是否存在

if (in_array(3, $numbers)) {

echo "3 exists in array\n";

// 查找键名

$keys = array_keys($numbers); // [0, 1, 2, 3, 4]

// 过滤数组

$evenNumbers = array_filter($numbers, fn($n) => $n % 2 === 0); // [1 => 2, 3 => 4]

2.2 排序

php

$fruits = ['banana', 'apple', 'orange'];

sort($fruits); // 升序排序 ['apple', 'banana', 'orange']

rsort($fruits); // 降序排序

// 关联数组排序

$users = [

['name' => 'Alice', 'age' => 25],

['name' => 'Bob', 'age' => 20]

// 按 age 升序排序

usort($users, fn($a, $b) => $a['age'] <=> $b['age']);

2.3 合并与拆分

php

$array1 = [1, 2];

$array2 = [3, 4];

// 合并数组

$merged = array_merge($array1, $array2); // [1, 2, 3, 4]

// 拆分数组

$chunked = array_chunk($merged, 2); // [[1, 2], [3, 4]]

2.4 映射与归约

php

$numbers = [1, 2, 3];

// 映射(每个元素 * 2)

$doubled = array_map(fn($n) => $n * 2, $numbers); // [2, 4, 6]

// 归约(求和)

$sum = array_reduce($numbers, fn($carry, $n) => $carry + $n, 0); // 6

3. 高级数组处理技巧

3.1 数组去重

php

$duplicates = [1, 2, 2, 3, 3, 3];

$unique = array_unique($duplicates); // [1, 2, 3]

3.2 数组列提取

php

$users = [

['id' => 1, 'name' => 'Alice'],

['id' => 2, 'name' => 'Bob']

// 提取所有 name

$names = array_column($users, 'name'); // ['Alice', 'Bob']

3.3 数组交集/差集

php

$array1 = [1, 2, 3];

$array2 = [2, 3, 4];

$intersect = array_intersect($array1, $array2); // [2, 3]

$diff = array_diff($array1, $array2); // [1]

3.4 随机打乱数组