删除数组元素有不同的方法,其中一些方法对某些特定任务更有用.
如果只想删除一个数组元素,可以使用unset()
或\array_splice()
.
如果您知道值,但不知道删除元素的键,那么可以使用\array_search()
来获取键.由于\array_search
只返回第一次命中,因此只有当元素不出现多次时,这才有效.
unset()
请注意,使用unset()
时,数组键不会改变.如果要重新索引键,可以使用unset()
之后的\array_values()
,这将把所有键转换为从0开始的数字枚举键.
代码:
$array = [0 => "a", 1 => "b", 2 => "c"];
unset($array[1]);
// ↑ Key which you want to delete
输出:
[
[0] => a
[2] => c
]
\array_splice()
method如果使用\array_splice()
,关键点将自动重新建立索引,但关联关键点不会更改,而使用\array_values()
则会将所有关键点转换为数字关键点.
\array_splice()
需要offset,而不是key作为第二个参数.
代码:
$array = [0 => "a", 1 => "b", 2 => "c"];
\array_splice($array, 1, 1);
// ↑ Offset which you want to delete
输出:
[
[0] => a
[1] => c
]
array_splice()
,与unset()
相同,通过引用获取array.您不会将这些函数的返回值分配回array.
如果要删除多个数组元素,并且不想多次调用unset()
或\array_splice()
,则可以使用函数\array_diff()
或\array_diff_key()
,具体取决于您是否知道要删除的元素的值或键.
\array_diff()
method如果知道要删除的数组元素的值,那么可以使用\array_diff()
.与之前的unset()
一样,它不会更改数组的键.
代码:
$array = [0 => "a", 1 => "b", 2 => "c", 3 => "c"];
$array = \array_diff($array, ["a", "c"]);
// └────────┘
// Array values which you want to delete
输出:
[
[1] => b
]
\array_diff_key()
method如果知道要删除的元素的键,则需要使用\array_diff_key()
.您必须确保将键作为第二个参数中的键传递,而不是作为值传递.密钥不会重新索引.
代码:
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = \array_diff_key($array, [0 => "xy", "2" => "xy"]);
// ↑ ↑
// Array keys which you want to delete
输出:
[
[1] => b
]
如果要使用unset()
或\array_splice()
删除具有相同值的多个元素,可以使用\array_keys()
获取特定值的所有键,然后删除所有元素.