**一、数组定义与初始化**
1. 创建数组
- **索引数组**(键为数字):
```php
$arr1 = array('apple', 'banana', 'orange'); // 传统方式
$arr2 = ['apple', 'banana', 'orange']; // 简写方式(PHP 5.4+)
```
- **关联数组**(键为字符串):
```php
$arr3 = array('name' => 'Tom', 'age' => 20, 'city' => 'Beijing');
$arr4 = ['name' => 'Tom', 'age' => 20, 'city' => 'Beijing'];
```
- **多维数组**:
```php
$users = [
['name' => 'Tom', 'age' => 20],
['name' => 'Alice', 'age' => 25]
];
```
**二、添加元素**
1. 末尾添加(索引数组常用)
- `array_push($array, $value1, $value2, ...)`:向数组末尾添加一个或多个元素。
```php
$arr = [1, 2, 3];
array_push($arr, 4, 5); // $arr 变为 [1,2,3,4,5]
```
- 直接赋值:
```php
$arr[] = 6; // 等价于 array_push,$arr 变为 [1,2,3,4,5,6]
```
2. 开头添加
- `array_unshift($array, $value1, $value2, ...)`:向数组开头添加元素。
```php
array_unshift($arr, 0); // $arr 变为 [0,1,2,3,4,5,6]
```
3. 关联数组添加键值对
php
$user = ['name' => 'Tom'];
$user['age'] = 20; // 添加新键 'age'
$user['city'] = 'Beijing'; // 继续添加
**三、删除元素**
1. 删除指定元素(根据键或索引)
- `unset($array[key])`:删除指定键的元素(索引/关联数组均适用)。
```php
$arr = ['a', 'b', 'c', 'd'];
unset($arr[1]); // $arr 变为 [0=>'a', 2=>'c', 3=>'d'](键不重排)
$user = ['name' => 'Tom', 'age' => 20];
unset($user['age']); // 删除关联键 'age'
```
2. 删除末尾元素
- `array_pop($array)`:删除并返回数组最后一个元素。
```php
$last = array_pop($arr); // $arr 变为 [0=>'a', 2=>'c'],$last='d'
```
3. 删除开头元素
- `array_shift($array)`:删除并返回数组第一个元素。
```php
$first = array_shift($arr); // $arr 变为 [2=>'c'], $first='a'
```
4. 删除指定位置元素(支持替换)
- `array_splice($array, $offset, $length, $replacement)`:从指定位置删除/替换元素。
```php
$arr = [1, 2, 3, 4, 5];
array_splice($arr, 2, 2); // 从索引 2 开始删除 2 个元素,$arr 变为 [1,2,5]
array_splice($arr, 1, 0, ['a', 'b']); // 在索引 1 插入 ['a','b'],$arr 变为 [1,'a','b',2,5]
```
**四、遍历数组**
1. 索引数组遍历(`for` 或 `foreach`)
php
$arr = [1, 2, 3, 4];
// for 循环(适用于连续索引)
for ($i = 0; $i < count($arr); $i++) {
echo $arr[$i] . PHP_EOL;
}
// foreach 循环(更通用)
foreach ($arr as $value) {
echo $value . PHP_EOL;
}
2. 关联数组遍历(`foreach`)
php
$user = ['name' => 'Tom', 'age' => 20];
foreach ($user as $key => $value) {
echo "$key: $value" . PHP_EOL; // 输出:name: Tom, age: 20
}
3. 多维数组遍历(嵌套 `foreach`)
php
$users = [
['name' => 'Tom', 'age' => 20],
['name' => 'Alice', 'age' => 25]
];
foreach ($users as $user) {
foreach ($user as $k => $v) {
echo "$k: $v | ";
}
echo PHP_EOL;
}
**五、数组合并与连接**
1. 合并数组
- `array_merge($array1, $array2, ...)`:合并多个数组(索引数组键重排,关联数组键冲突时后者覆盖前者)。
```php
$a = [1, 2];
$b = [3, 4];
$c = array_merge($a, $b); // [1,2,3,4]
$x = ['a' => 1];
$y = ['a' => 2, 'b' => 3];
$z = array_merge($x, $y); // ['a'=>2, 'b'=>3](键 'a' 被 $y 覆盖)
```
- `+` 运算符:合并数组(键冲突时保留前者,不重排索引)。
```php
$x + $y; // ['a'=>1, 'b'=>3](键 'a' 保留 $x 的值)
```
2. 连接数组为字符串
- `implode($glue, $array)`:用分隔符连接数组元素为字符串。
```php
$str = implode(',', ['apple', 'banana', 'orange']); // "apple,banana,orange"
```
3. 字符串分割为数组
- `explode($delimiter, $string, $limit)`:按分隔符分割字符串为数组。
```php
$arr = explode(',', 'apple,banana,orange'); // ['apple', 'banana', 'orange']
```
**六、查找与判断**
1. 检查元素是否存在
- `in_array($value, $array, $strict)`:检查值是否存在(`$strict` 为 `true` 时严格类型检查)。
```php
in_array('banana', ['apple', 'banana']); // true
```
2. 检查键是否存在
- `array_key_exists($key, $array)`:检查指定键是否存在。
```php
array_key_exists('age', ['name' => 'Tom', 'age' => 20]); // true
```
3. 查找值对应的键
- `array_search($value, $array, $strict)`:返回值对应的键(存在多个时返回第一个)。
```php
$key = array_search('banana', ['a' => 'apple', 'b' => 'banana']); // 'b'
```
**七、排序操作**
1. 索引数组排序(不保留键)
- `sort($array)`:升序排序。
- `rsort($array)`:降序排序。
```php
$arr = [3, 1, 2];
sort($arr); // [1,2,3]
rsort($arr); // [3,2,1]
```
2. 关联数组排序(保留键值对应)
- **按值排序**:
- `asort($array)`:升序。
- `arsort($array)`:降序。
- **按键排序**:
- `ksort($array)`:按键升序。
- `krsort($array)`:按键降序。
```php
$user = ['age' => 20, 'name' => 'Tom', 'city' => 'Beijing'];
asort($user); // 按值升序:['name'=>'Tom', 'age'=>20, 'city'=>'Beijing']
ksort($user); // 按键升序:['age'=>20, 'city'=>'Beijing', 'name'=>'Tom']
```
3. 自定义排序(`usort`, `uasort`, `uksort`)
- `usort($array, $callback)`:按自定义函数对值排序(不保留键)。
- `uasort($array, $callback)`:按自定义函数对值排序(保留键)。
- `uksort($array, $callback)`:按自定义函数对键排序。
```php
$arr = [3, 1, 4, 2];
usort($arr, function($a, $b) { return $a - $b; }); // 升序:[1,2,3,4]
```
**八、其他常用操作**
1. 获取数组长度
- `count($array, $mode)`:返回数组元素个数(`$mode` 用于多维数组,默认 0 表示不递归,1 表示递归计算所有元素)。
```php
count([1, 2, 3]); // 3
```
2. 获取键/值列表
- `array_keys($array)`:返回所有键。
- `array_values($array)`:返回所有值(索引数组键重排为 0,1,2...)。
```php
$user = ['name' => 'Tom', 'age' => 20];
array_keys($user); // ['name', 'age']
array_values($user); // ['Tom', 20]
```
3. 反转数组
- `array_reverse($array, $preserve_keys)`:反转数组顺序(`$preserve_keys` 为 `true` 时保留原键)。
```php
$arr = [1, 2, 3];
array_reverse($arr); // [3,2,1](键变为 0,1,2)
array_reverse($arr, true); // [2=>3, 1=>2, 0=>1](保留原键)
```
4. 数组切片(提取部分元素)
- `array_slice($array, $offset, $length = null, $preserve_keys = false)`:从指定位置截取子数组。
```php
$arr = [1, 2, 3, 4, 5];
array_slice($arr, 2); // [3,4,5](从索引 2 到末尾)
array_slice($arr, 1, 2); // [2,3](从索引 1 开始取 2 个元素)
```
5. 填充数组
- `array_fill($start_index, $count, $value)`:用指定值填充数组。
```php
$arr = array_fill(0, 3, 'a'); // [0=>'a', 1=>'a', 2=>'a']
```
6. 合并键值对
- `array_combine($keys, $values)`:用两个数组分别作为键和值创建关联数组(键和值数量需一致)。
```php
$keys = ['name', 'age'];
$values = ['Tom', 20];
$user = array_combine($keys, $values); // ['name'=>'Tom', 'age'=>20]
```
7. 检查是否为数组
- `is_array($var)`:判断变量是否为数组。
```php
is_array([1,2,3]); // true
```
**九、多维数组操作**
1. 提取二维数组某一列
- `array_column($array, $column_key, $index_key = null)`:提取二维数组中指定列作为新数组。
```php
$users = [
['id' => 1, 'name' => 'Tom'],
['id' => 2, 'name' => 'Alice']
];
$names = array_column($users, 'name'); // ['Tom', 'Alice']
$id_name = array_column($users, 'name', 'id'); // [1=>'Tom', 2=>'Alice']
```
2. 过滤数组元素
- `array_filter($array, $callback)`:根据回调函数过滤元素(返回 `true` 的元素保留)。
```php
$arr = [1, 0, false, 5, '', null];
$filtered = array_filter($arr); // 过滤空值,结果 [1,5]
// 自定义过滤(保留偶数)
$even = array_filter($arr, function($v) { return $v % 2 === 0; });
```
3. 对每个元素应用函数
- `array_map($callback, $array1, $array2, ...)`:对数组每个元素应用函数,返回新数组。
```php
$arr = [1, 2, 3];
$double = array_map(function($v) { return $v * 2; }, $arr); // [2,4,6]
// 处理多个数组(按元素对应处理)
$a = [1, 2, 3];
$b = [4, 5, 6];
$sum = array_map(function($x, $y) { return $x + $y; }, $a, $b); // [5,7,9]
```
以上是 PHP 数组的常见操作,掌握这些方法可以高效处理数组数据。实际开发中可根据场景选择合适的函数,注意数组类型(索引/关联)和函数是否保留键的特性。