有不同的方法来删除数组元素,其中一些对于某些特定任务比其他任务更有用。
删除一个数组元素
如果你只想删除一个数组元素,你可以使用unset()或者替代array_splice()。
此外,如果你有值,不知道要删除的元素的关键,你可以使用array_search()获取密钥。
注意,当你使用unset()时,数组键不会改变/ reindex。如果你想重新索引键,你可以在unset()之后使用array_values(),它将所有键转换为从0开始的数字枚举键。
码
$array = array(0 => "a", 1 => "b", 2 => "c");
unset($array[1]);
//↑ Key which you want to delete
?>
输出
Array (
[0] => a
[2] => c
)
如果使用array_splice(),键将被自动重建索引,但关联键不会改变,而是会将所有键转换为数字键的array_values()。
另外,array_splice()需要偏移量,而不是键!,作为第二个参数。
码
$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()相同,通过引用获取数组,这意味着你不想将这些函数的返回值分配回数组。
删除多个数组元素
如果要删除多个数组元素,并且不想多次调用unset()或array_splice(),则可以使用函数array_diff()或array_diff_key(),这取决于是否知道元素的值或键您要删除。
如果知道要删除的数组元素的值,那么可以使用array_diff()。像以前一样unset()它不会改变/ reindex数组的键。
码
$array = array(0 => "a", 1 => "b", 2 => "c");
$array = array_diff($array, ["a", "c"]);
//└────────┘→ Array values which you want to delete
?>
输出
Array (
[1] => b
)
如果你知道你想要删除的元素的键,那么你想使用array_diff_key()。在这里你必须确保你传递的键作为键在第二个参数,而不是值。否则你必须翻转数组与array_flip().也在这里键不会改变/ reindex。
码
$array = array(0 => "a", 1 => "b", 2 => "c");
$array = array_diff_key($array, [0 => "xy", "2" => "xy"]);
//↑ ↑ Array keys which you want to delete
?>
输出
Array (
[1] => b
)
另外,如果你想使用unset()或array_splice()删除多个相同的值的元素,你可以使用array_keys()获取所有的键为一个特定的值,然后删除所有的元素。