有没有一种简单的方法可以使用 PHP 从数组中删除一个元素,这样 foreach ($array)
不再包含该元素?
我认为将其设置为 null
会做到这一点,但显然它不起作用。
原文由 Ben 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您不能认为该对象在该数组中,则需要添加一个检查:
if(in_array($object,$array)) unset($array[array_search($object,$array)]);
如果您想通过引用该对象来删除数组的特定对象,您可以执行以下操作:
unset($array[array_search($object,$array)]);
例子:
<?php
class Foo
{
public $id;
public $name;
}
$foo1 = new Foo();
$foo1->id = 1;
$foo1->name = 'Name1';
$foo2 = new Foo();
$foo2->id = 2;
$foo2->name = 'Name2';
$foo3 = new Foo();
$foo3->id = 3;
$foo3->name = 'Name3';
$array = array($foo1,$foo2,$foo3);
unset($array[array_search($foo2,$array)]);
echo '<pre>';
var_dump($array);
echo '</pre>';
?>
结果:
array(2) {
[0]=>
object(Foo)#1 (2) {
["id"]=>
int(1)
["name"]=>
string(5) "Name1"
}
[2]=>
object(Foo)#3 (2) {
["id"]=>
int(3)
["name"]=>
string(5) "Name3"
}
}
请注意,如果对象多次出现,则只会在第一次出现时将其删除!
原文由 Sam Tigle 发布,翻译遵循 CC BY-SA 4.0 许可协议
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答591 阅读✓ 已解决
792 阅读
删除数组元素有多种方法,其中有些方法对某些特定任务比其他方法更有用。
删除单个数组元素
如果您只想删除一个数组元素,可以使用
unset()
或\array_splice()
。如果您知道值并且不知道删除元素的键,您可以使用
\array_search()
来获取键。这仅在元素不出现多次时才有效,因为\array_search
仅返回第一次命中。unset()
请注意,当您使用
unset()
时,数组键不会改变。如果要重新索引键,可以在\array_values()
之后使用 ---unset()
,这会将所有键转换为从 0 开始的数字枚举键。代码:
输出:
\array_splice()
方法如果您使用
\array_splice()
键将自动重新索引,但关联键不会更改 - 而\array_values()
会将所有键转换为数字键。\array_splice()
需要 offset ,而不是 key ,作为第二个参数。代码:
输出:
array_splice()
同unset()
引用数组。您不会将这些函数的返回值分配回数组。删除多个数组元素
If you want to delete multiple array elements and don’t want to call
unset()
or\array_splice()
multiple times you can use the functions\array_diff()
or\array_diff_key()
取决于您是否知道要删除的元素的值或键。\array_diff()
方法如果您知道要删除的数组元素的值,则可以使用
\array_diff()
。与unset()
之前一样,它不会更改数组的键。代码:
输出:
\array_diff_key()
方法如果您知道要删除的元素的键,那么您想使用
\array_diff_key()
。您必须确保将键作为第二个参数中的键而不是值传递。键不会重新索引。代码:
输出:
如果要使用
unset()
或\array_splice()
删除具有相同值的多个元素,可以使用\array_keys()
获取特定值的所有键,然后删除所有元素。\array_filter()
方法如果要删除数组中具有特定值的所有元素,可以使用
\array_filter()
。代码:
输出: