PHP:从数组中删除对象 [英] PHP : Remove object from array
本文介绍了PHP:从数组中删除对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在 PHP 中从对象数组中删除对象的优雅方法是什么?
What is an elegant way to remove an object from an array of objects in PHP ?
只是说清楚..
class Data{
private $arrObservers;
public add(Observer $o) {
array_push($this->arrObservers, $o);
}
public remove(Observer $o) {
// I NEED THIS CODE to remove $o from $this->arrObservers
}
}
推荐答案
你可以做
function unsetValue(array $array, $value, $strict = TRUE)
{
if(($key = array_search($value, $array, $strict)) !== FALSE) {
unset($array[$key]);
}
return $array;
}
您也可以使用 spl_object_hash
为对象创建一个散列并将其用作数组键.
You can also use spl_object_hash
to create a hash for the objects and use that as array key.
然而,PHP 也有一个用于对象集合的原生数据结构,带有 SplObjectStorage
:
However, PHP also has a native Data Structure for Object collections with SplObjectStorage
:
$a = new StdClass; $a->id = 1;
$b = new StdClass; $b->id = 2;
$c = new StdClass; $c->id = 3;
$storage = new SplObjectStorage;
$storage->attach($a);
$storage->attach($b);
$storage->attach($c);
echo $storage->count(); // 3
// trying to attach same object again
$storage->attach($c);
echo $storage->count(); // still 3
var_dump( $storage->contains($b) ); // TRUE
$storage->detach($b);
var_dump( $storage->contains($b) ); // FALSE
SplObjectStorage
是 Traversable
,所以你也可以 foreach
覆盖它.
SplObjectStorage
is Traversable
, so you can foreach
over it as well.
On a sidenote, PHP also has native interfaces for Subject and Observer.
这篇关于PHP:从数组中删除对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文