您的位置:首页 > 编程语言 > PHP开发

[stackoverflow翻译] 删除数组中的元素——PHP

2017-02-23 13:57 218 查看

问:

有没有简便的方法可以从php数组中删除元素,使用
foreach ($array)
也不会遍历到被删的元素?我原以为将元素的值设为null可以,但事实显然并非如此.

答:

删除一个数组元素有多个方法,有的方法在一些特殊的情况下会比其他的方法更有用.

删除一个数组元素

如果你仅仅想删除一个数组元素,你可以交替使用
unset()
array_splice()
.如果你想删除一个数组元素但只知道他的 value 而不知道 key ,你可以使用
array_search()
去获得key.

unset()
方法

需知使用
unset()
后,数组不会重建索引.如果你想要重建索引可以在
unset()
之后使用 
array_values()
此函数将把所有的key转变成从0开始的数字的枚举类型.代码:
<?php

$array = array(0 => "a", 1 => "b", 2 => "c");
unset($array[1]);
//↑ 你想要删除元素的key

?>
输出:
Array (
[0] => a
[2] => c
)

array_splice()
方法

如果你使用
array_splice()
方法, key 的索引将会被自动重建, 但组合的key(associative keys)不会被改变,相反
array_values()
方法会将所有的key转变成枚举的数字型key.
array_splice()
需要偏移量作为第二个参数,而不是key.代码:
<?php

$array = array(0 => "a", 1 => "b", 2 => "c");
array_splice($array, 1, 1);
//↑ Offset which you want to delete

?>
输出:
Array (
[0] => a
[1] => c
)
array_splice()
unset()
一样通过引用来操作数组, 这意味着你不想指定返回值this means you don't want to assign the return values of those functions back to the array.

删除多个数组元素

如果你想删除多个数组元素,且不多次调用
unset()
array_splice()
.在知道元素的value或key的情况下可以分别使用
array_diff()
array_diff_key()
方法.

array_diff()
方法

在知道欲删除元素的value时当使用此方法,使用后不重置数组索引.代码:
<?php

$array = array(0 => "a", 1 => "b", 2 => "c");
$array = array_diff($array, ["a", "c"]);
//└────────┘→ 要删除元素的value

?>
输出:
Array (
[1] => b
)

array_diff_key()
方法

在知道欲删除元素的key时当使用此方法,使用后也不重置数组索引.请确保在第二个参数传入的是欲删除元素的key. 否则必须使用
array_flip()
来反转数组.代码:
<?php

$array = array(0 => "a", 1 => "b", 2 => "c");
$array = array_diff_key($array, [0 => "xy", "2" => "xy"]);
//↑           ↑
要删除元素的key
?>
输出:
Array (
[1] => b
)
如果你想用
unset()
array_splice()
删除具有相同value的多个元素你可以使用
array_keys()
来获取那个特殊value的所有key.问题链接:http://stackoverflow.com/questions/369602/delete-an-element-from-an-array
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stack overflow php