PHP 数组常用操作:合并、拆分、查找与增删全解

小石头
小石头
发布时间:2026-10-15 | 6人浏览过
原创

PHP 数组是开发中最常用的数据结构之一。本文梳理了从基础的合并、拼接,到复杂的切片、替换,再到交集差集运算等核心函数。同时包含数组遍历指针操作及模拟栈和队列的增删技巧,帮助开发者高效处理各类数组场景。

1. 数组合并与连接

在处理数组时,经常需要将多个数组合并为一个,或者将两组数据建立对应关系。

第1步:合并数组 array_merge()

目的:将多个数组合并为一个联合数组,返回新结果。

  • 入口与规则:数字键名的值不会覆盖,而是追加;字符串键名后面的值会覆盖前面的值。
  • 示例:
<?php
$fruits = array("apple", "banana", "pear");
$numbered = array("1", "2", "3");
// 数字索引自动重新编号追加
$cards = array_merge($fruits, $numbered);
print_r($cards);
// 输出: Array ( [0] => apple [1] => banana [2] => pear [3] => 1 [4] => 2 [5] => 3 )
?>

第2步:递归合并 array_merge_recursive()

目的:当出现相同键名时,不直接覆盖,而是将两个值放入一个新的子数组中。

  • 重要参数:输入多个数组。
  • 完成状态:相同键对应的值变为嵌套数组。
<?php
$fruit1 = array("apple" => "red", "banana" => "yellow");
$fruit2 = array("pear" => "yellow", "apple" => "green");
$result = array_merge_recursive($fruit1, $fruit2);
// 'apple' 的值变成了数组 ['red', 'green']
?>

第3步:连接键与值 array_combine()

目的:使用一个数组的值作为键,另一个数组的值作为值,生成新数组。

  • 注意:两个输入数组的大小必须相同且不为空。
<?php
$name = array("apple", "banana", "orange");
$color = array("red", "yellow", "orange");
$fruit = array_combine($name, $color);
?>

2. 数组截取与接合(切片与替换)

这两个函数常被混淆:array_slice 只取部分不改变原数组,array_splice 则会删除原数组中的部分并可选择性插入新内容。

第4步:安全切片提取 array_slice()

目的:返回数组中的一部分,不修改原数组。

  • 参数:offset (起始位置), length (长度)。
  • 负数逻辑:offset 为负表示距末尾的位置;length 为负表示截取的终点距离末尾多少个元素。
<?php
$fruits = array("Apple", "Banana", "Orange", "Pear", "Grape", "Lemon", "Watermelon");
// 从索引 2 开始,截取到倒数第 2 个元素之前
$subset = array_slice($fruits, 2, -2);
// 输出: Orange, Pear, Grape
?>

第5步:接合(删除并可选替换)array_splice()

目的:从原数组中删除指定范围的元素,并返回被删除的元素组成的数组。还可以用第四个参数替换被删除的部分。

  • 风险提醒:array_splice 会永久修改原始数组的数据结构和索引。
  • 参数:array, offset, length, 可选 replacement 数组。
<?php
$fruits = array("Apple", "Banana", "Orange", "Pear", "Grape", "Lemon", "Watermelon");
// 删除索引 2 开始到倒数第 1 个之前的元素,并插入新水果
$subset = array_splice($fruits, 2, -1, array("Green Apple", "Red Apple"));
// $fruits 现在包含新的插入项,$subset 包含被移出的旧项
?>

3. 交集与差集运算

用于对比不同数组间的数据重合度。

第6步:基础交集 array_intersect()

目的:返回在第一个数组中出现,且在所有其他数组中也出现的值。保持第一个数组的键名。

  • 完成判断:只有值和类型完全一致才算相同。
<?php
// 仅返回值相等的交集
$intersection = array_intersect($fruit1, $fruit2); // ['Apple']
?>

第7步:带键名交集 array_intersect_assoc()

目的:除了比较值,还严格比较键名。只有键名和值都匹配的键值对才会保留。

<?php
// red => Apple 同时存在于三个数组中
$result = array_intersect_assoc($fruit1, $fruit2, $fruit3);
?>

第8步:差集运算 array_diff() 与 array_diff_assoc()

目的:返回只出现在第一个数组中,而不出现在后续数组中的元素。

  • array_diff:仅比值。
  • array_diff_assoc:比键和值。
<?php
// 找出只在 $fruit1 中存在的项
$res = array_diff($fruit1, $fruit2, $fruit3);
?>

4. 数组指针与遍历辅助

早期 PHP 版本常用这些函数配合 while 循环进行遍历,虽然现代开发更推荐 foreach,但了解其机制仍有助于理解底层逻辑。

第9步:定位当前元素

  • key():获取当前指针位置的键。
  • current():获取当前指针位置的值。
  • next():将指针向前移动一位(仅负责移动,不返回值)。

第10步:一次性获取键值对 each()

目的:返回当前指针所在的键/值对,并将指针推进一步。

  • 注意:each() 在某些高版本 PHP 中已被废弃或建议避免使用,但在老代码库中常见。通常与 list() 结合使用。
<?php
reset($fruits); // 重置指针到开头
while (list($key, $val) = each($fruits)) {
    echo "$key => $val<br />";
}
?>

5. 查找与筛选

第11步:值存在性检查 in_array()

目的:在数组中搜索特定值,找到返回 true,否则 false。

  • 参数:第三个布尔参数 strict 若为 true,则同时检查数据类型。

第12步:键名存在性检查 array_key_exists()

目的:检查数组中是否存在指定的键名。

<?php
if(array_key_exists("apple", $fruit)){
    printf("apple's color is %s", $fruit["apple"]);
}
?>

第13步:搜索获取键名 array_search()

目的:在数组中搜索给定的值,如果成功返回相应的键名,否则返回 false。

第14步:提取所有键或值

  • array_keys():返回包含所有键名的新数组。可传入第二个参数只返回匹配指定值的键。
  • array_values():返回包含所有值的新数组,并重新索引数值键。

6. 模拟栈与队列的增删(头尾操作)

利用数组的特性实现简单的 FIFO(先进先出)或 LIFO(后进先出)逻辑。

第15步:头部与尾部压入(添加)

  • array_unshift($arr, $val):从头部添加元素。数值键会重排,关联键不变。返回新数组长度。
  • array_push($arr, $val):从尾部添加元素。返回新数组长度。

第16步:头部与尾部弹出(删除)

  • array_shift($arr):删除并返回数组的第一个元素。其余元素前移并重新索引。
  • array_pop($arr):删除并返回数组的最后一个元素。
以上就是 PHP 数组常用操作的详细内容,更多关于 PHP 数组技巧的资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表