从 PHP 中的数组中删除元素
有没有一种简单的方法可以使用PHP从数组中删除元素,从而不再包含该元素?foreach ($array)
我以为设置它会做到这一点,但显然它不起作用。null
有没有一种简单的方法可以使用PHP从数组中删除元素,从而不再包含该元素?foreach ($array)
我以为设置它会做到这一点,但显然它不起作用。null
删除数组元素有不同的方法,其中一些方法对于某些特定任务比其他方法更有用。
如果只想删除一个数组元素,可以使用 unset()
或 \array_splice()。
如果您知道该值,但不知道删除该元素的键,则可以使用 \array_search()
来获取该键。仅当元素不出现多次时,这才有效,因为仅返回第一个命中。\array_search
unset()
请注意,当您使用数组时,键不会更改。如果要对密钥重新编制索引,可以在 之后使用 \array_values()
,这会将所有密钥转换为从 0 开始的数字枚举密钥。unset()
unset()
法典:
$array = [0 => "a", 1 => "b", 2 => "c"];
unset($array[1]);
// ↑ Key which you want to delete
输出:
[
[0] => a
[2] => c
]
\array_splice()
方法如果使用密钥,则会自动重新编制索引,但关联密钥不会更改 , 而不是 将所有密钥转换为数字密钥。\array_splice()
\array_values()
\array_splice()
需要偏移量,而不是键,作为第二个参数。
法典:
$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()
如果要删除多个数组元素,并且不想调用或多次调用,则可以使用这些函数,或者根据您是否知道要删除的元素的值或键。unset()
\array_splice()
\array_diff()
\array_diff_key()
\array_diff()
方法如果您知道要删除的数组元素的值,则可以使用 .和以前一样,它不会改变数组的键。\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()
方法如果您知道要删除的元素的键,则要使用 .您必须确保将键作为第二个参数中的键传递,而不是作为值传递。密钥不会重新编制索引。\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
]
如果要使用或删除具有相同值的多个元素,可以使用 \array_keys()
获取特定值的所有键,然后删除所有元素。unset()
\array_splice()
\array_filter()
方法如果要删除数组中具有特定值的所有元素,可以使用 。\array_filter()
法典:
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = \array_filter($array, static function ($element) {
return $element !== "b";
// ↑
// Array value which you want to delete
});
输出:
[
[0] => a
[1] => c
]
应该注意的是,unset()
将保持索引不变,这是您在使用字符串索引(数组作为 hashtable)时所期望的,但在处理整数索引数组时可能会非常令人惊讶:
$array = array(0, 1, 2, 3);
unset($array[2]);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[3]=>
int(3)
} */
$array = array(0, 1, 2, 3);
array_splice($array, 2, 1);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(3)
} */
因此,如果您想规范化整数键,可以使用array_splice()。
另一个选项是在 unset()
之后使用 array_values():
$array = array(0, 1, 2, 3);
unset($array[2]);
$array = array_values($array);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(3)
} */