PHP如何在数组中删除或者插入元素

2022年11月15日服务端开发评论47,052字数 1359阅读4分31秒阅读模式

引言

最近遇到一个简单的问题,给前端一组数据,但是要做判断,来删除其中数组的某一个元素,该怎么办呢?

Vida_2022-11-15_09-27-44

比较主流的说法是用unset函数,虽然可以实现,但是我发现删除后,索引并没有改变,导致前端拿到内容后,无法循环遍历出内容.

于是我赶紧补课,以下是整理的关于如何移除数组元素的方法。

删除或者插入

大致上说,移除数组元素,有两个常用方法,一个是 unset 函数,一个是 array_splice 函数。

unset 函数(删除)

请注意,使用 unset 函数不会重新构建索引,数组不会洗牌。

如果你想要在删除元素后重新创建索引,那就执行 array_values(返回数组中所有的值(不保留键名)),返回的数组就是重新编排过索引的了。

举例说明:

$array = [0 => "a", 1 => "b", 2 => "c"];
unset($array[1]);

执行该操作后,数组 $array 的值如下:

[
    [0] => a
    [2] => c
]

可以注意到数组索引没有变化。

array_splice 函数(删除或者插入)

这个函数在移除元素后,关联数组的对应关系不会改变,此函数的参数形式:

array_splice(array1,start,length,array2)

用来把数组中的一部分去掉并用其它值取代 。

如果是数字索引,返回的数组会重新编排索引值:

$array = [0 => "a", 1 => "b", 2 => "c"];
array_splice($array, 1, 1);

返回的值:

[
    [0] => a
    [1] => c
]

可以看到索引被重新编排了。

这个函数还可以实现插入的效果,也就是删除0位,然后用array2替换来实现插入。

比如:

$a1=array("0"=>"red","1"=>"green");
$a2=array("0"=>"purple","1"=>"orange");
array_splice($a1,1,0,$a2);
print_r($a1);

返回的值为:

Array ( [0] => red [1] => purple [2] => orange [3] => green )

更多

上面说的两个示例,都是单个元素的处理。下面说说移除多个数组元素。

unset / array splice 用起来太繁琐了,要一个一个地操作。

如果我们知道了数组元素的键,或者值,则可以使用 array_diff / array_diff_key 来进行批量操作。

array_diff 函数

比如已知要删除的元素的值,可以像下面这样移除:

$array = [0 => "a", 1 => "b", 2 => "c"];
$array = array_diff($array, ["a", "c"]);

结果输出:

[
    [1] => b
]

数组的索引并不会被重建。

array_diff_keys 函数

如果已知要删除元素的索引,可以通过下面这样删除:

$array = [0 => "a", 1 => "b", 2 => "c"];
$array = array_diff_key($array, [0 => "xy", "2" => "xy"]);

执行后输出:

[
    [1] => b
]

索引没有重建。

另外还有一些函数也可以达到删除数组元素的目的,比如array_flip()(反转数组中的键名和对应关联的键值再删除),或者array_search搭配unset()array_unique()(移除数组中重复的值)等,有兴趣的可以自己再学习了解下。

- end -

匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定