PHP数组增删改查常用函数全解:push/pop/unshift/shift及搜索
本文将深入讲解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数组操作技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









