PHP数组增删改查常用函数全解:push/pop/unshift/shift及搜索

一只小鹿
一只小鹿
发布时间:2026-10-13| 3人浏览过
原创

本文将深入讲解PHP中用于管理数组元素的七种核心函数,包括在数组两端进行添加或删除操作的unshift/push/shift/pop方法,以及用于验证数据存在的in_array/key_exists/search等查询工具,配合keys和values辅助函数,全面掌握数组数据处理技巧。

理解数组基础操作与数据结构

在处理动态数据时,我们经常需要向数组中添加新项或移除旧项。PHP提供了一组专门的函数来简化这些任务。理解这些函数的行为有助于构建类似于队列(先进先出 FIFO)或栈(后进先出 LIFO)的逻辑结构:

  • 队列 (FIFO):删除元素的顺序与加入顺序相同。例如:入队(push)在后端,出队(shift)在前端。
  • 栈 (LIFO):删除元素的顺序与加入顺序相反。例如:推入(pop)和弹出(unshift)通常在同一端进行,或者结合使用。

第1步:在数组头部或尾部添加元素

这是扩充数组最基础的两种操作。根据需求,可以选择在现有数据的开头还是结尾追加内容。

在数组头添加元素:array_unshift()

目的:向数组的最前端插入一个新或多个元素。
参数说明:array_unshift(array $array, mixed $var [, mixed $...])。第一个参数为目标数组,后续参数为要添加的值。
重要特性:所有已有的数值键会自动重新排序(从0开始递增),但关联键(字符串键)保持不变且位置不变。

$fruits = array("apple", "banana");
// 在头部添加 orange 和 pear
array_unshift($fruits, "orange", "pear");
print_r($fruits);
/*
结果:
Array
(
    [0] => orange
    [1] => pear
    [2] => apple
    [3] => banana
)
*/

在数组尾添加元素:array_push()

目的:将一个或多个变量压入数组的末尾。
返回值:返回整数,表示操作后数组中元素的总数(而非新增数量)。
参数说明:array_push(array &$array, mixed $var [, mixed $...])。

$fruits = array("apple", "banana");
// 在尾部添加 orange 和 pear
$count = array_push($fruits, "orange", "pear");
print_r($fruits);
echo "当前元素总数: " . $count;
/*
结果: Array([0] => apple [1] => banana [2] => orange [3] => pear)
当前元素总数: 4
*/

第2步:从数组头部或尾部删除元素

与添加相对,删除操作会将指定位置的元素移出并返回其值。注意这对数字索引的影响。

从数组头删除值:array_shift()

目的:删除并返回数组的第一个元素(即索引最小的元素)。
重要特性:如果使用的是数值键,后续元素的索引会依次减1;关联键不受影响。

$fruits = array("apple", "banana", "orange", "pear");
// 移除第一个元素
$first = array_shift($fruits);
print_r($fruits);
echo "移出的元素: " . $first;
/*
结果:
Array([0] => banana [1] => orange [2] => pear)
移出的元素: apple
*/

从数组尾删除元素:array_pop()

目的:删除并返回数组的最后一个元素。
参数说明:array_pop(array &$array)。

$fruits = array("apple", "banana", "orange", "pear");
// 移除最后一个元素
$last = array_pop($fruits);
print_r($fruits);
echo "移出的元素: " . $last;
/*
结果:
Array([0] => apple [1] => banana [2] => orange)
移出的元素: pear
*/

第3步:查找、筛选与搜索数组元素

在实际业务中,我们需要确认某个值是否存在于数组中,或者找到特定值对应的键。

检查值是否存在:in_array()

作用:判断一个值是否存在于数组中。返回布尔值 (true/false)。
参数说明:in_array(mixed $needle, array $haystack, bool $strict = false)。第三个参数 $strict 可选,若设为 true,将进行严格类型检查(不仅比较值,还比较数据类型)。

$target = "apple";
$fruits = array("apple", "banana", "orange");

// 基本查找
if(in_array($target, $fruits)){
 echo "$target 存在于数组中\n";
}

// 严格查找示例:1 (int) 不等于 "1" (string)
$data = array(1, "2", 3);
// in_array(1, $data, true) 将返回 true
// in_array("1", $data, true) 将返回 false

检查键是否存在:array_key_exists()

作用:检查指定的键名(Key)是否在数组中存在。
参数说明:array_key_exists(mixed $key, array $array)。

$fruit_info = array(
    "apple" => "red",
    "banana" => "yellow",
    "pear" => "green"
);

// 检查 'apple' 这个键是否存在
if(array_key_exists("apple", $fruit_info)){
 echo "apple's color is " . $fruit_info["apple"];
}
// 输出: apple's color is red

搜索值的键:array_search()

作用:在数组中搜索指定的值,如果找到则返回对应的键(Key),否则返回 false。
参数说明:array_search(mixed $needle, array $haystack, bool $strict = false)。同样支持可选的严格模式参数。

$product_prices = array(
    "apple" => 1.5,
    "banana" => 0.8,
    "watermelon" => 5.0
);

// 搜索价格为 5.0 对应的水果名称(键)
$key = array_search(5.0, $product_prices);
if($key !== false){ // 使用 !== false 以区分值为 0 的情况
    echo "$key 的价格是 5.0\n";
}
// 输出: watermelon 的价格是 5.0

第4步:提取数组的键或值

有时我们需要将数组的结构扁平化,仅保留所有的键名或所有的值,此时可以使用以下两个辅助函数。

获取所有键:array_keys()

作用:返回包含数组中所有键名的新数组。
可选参数:若传入第二个参数 $search_value,则只返回与特定值匹配的键。

$arr = array("color" => "red", "size" => "big", "type" => "car");

// 获取所有键
$all_keys = array_keys($arr);
print_r($all_keys);
/*
结果: Array([0] => color [1] => size [2] => type)
*/

// 获取值为 "big" 的键
$key_by_val = array_keys($arr, "big");
print_r($key_by_val); // Array([0] => size)

获取所有值:array_values()

作用:返回包含数组中所有值的数组。新数组将强制使用从0开始的数值索引,从而丢弃原有的关联键或自定义数值键。

$arr = array("a" => 1, "b" => 2, "c" => 3);

// 转换为纯数值索引数组
$values = array_values($arr);
print_r($values);
/*
结果: Array([0] => 1 [1] => 2 [2] => 3)
*/

简要总结

PHP的数组操作函数设计直观,push/pop系列处理末尾,shift/unshift系列处理头部,配合 in_array、array_key_exists 和 array_search 能够实现灵活的数据检索,而 array_keys 和 array_values 则是转换数据结构类型的利器。熟练掌握这些函数,能显著提升处理列表数据的效率。

以上就是PHP数组增删改查常用函数全解的详细内容,更多关于PHP数组操作技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。