我看到有同学将要删除的元素 = null,这并不起浸染,由于 null 也是作为值存在的。并不能移除元素。
本文就专门说说移除数组元素的方法。
学习韶光
大致上说,移除数组元素,有两个常用方法,一个是 unset 函数,一个是 array_splice 函数。
array_splice 什么韶光利用?便是你拿到的是值,却不知道其索引,就要用这个了。
unset 函数
请把稳,利用 unset 函数不会重新构建索引,数组不会洗牌。如果你想要在删除元素后重新创建索引,那就实行 array_values,返回的数组便是重新编排过索引的了。并且所有索引被设置成默认从0开始的数字。
举例解释:
$array = [0 => "a", 1 => "b", 2 => "c"];unset($array[1]);
实行该操作后,数组 $array 的值如下:
[ [0] => a [2] => c]
可以把稳到数组索引没有变革。
array_splice 函数
这个函数在移除元素后,关联数组的对应关系不会改变,此函数的参数形式:
array array_splice( array &$input, int $offset[, int $length = 0[, mixed $replacement]] )
用来把数组中的一部分去掉并用其它值取代 。如果末了的参数 $replaement 不传,便是默认为把 $offset 开始的 $length 个元素删除。
如果是数字索引,返回的数组会重新编排索引值:
$array = [0 => "a", 1 => "b", 2 => "c"];array_splice($array, 1, 1);
返回的值:
[ [0] => a [1] => c]
可以看到索引被重新编排了。
再深一步上面说的两个示例,都是单个元素的删除。下面说说移除多个数组元素。
unset / arraysplice 用起来太繁琐了,要一个一个地操作。如果我们知道了数组元素的键,或者值,则可以利用 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]
索引没有重修。
写在末了本文我们通过几个示例,演示了数组移除元素的办法,不要再一个 for 循环走遍天下了。PHP 供应了许多有利于减少冗余代码的函数工具,我们该当用起来。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。