如何从具有相同名称的对象数组中删除元素,使其仅存在一次?
在下面的例子中,我想删除元素2,因为名称与元素0相同。 (对我而言,id或count这个词不同是无关紧要的。)
array(1) {
[0]=> object(stdClass)#268 (3) {
["term_id"]=> string(3) "486"
["name"]=> string(4) "2012"
["count"]=> string(2) "40"
}
[1]=> object(stdClass)#271 (3) {
["term_id"]=> string(3) "488"
["name"]=> string(8) "One more"
["count"]=> string(2) "20"
}
[2]=> object(stdClass)#275 (3) {
["term_id"]=> string(3) "512"
["name"]=> string(8) "2012"
["count"]=> string(2) "50"
}
答案 0 :(得分:2)
如果对象的'name'属性是公共的,就像这样:
$filteredObjArr = array();
$existNames = array();
foreach($objArray as $k => $obj) {
if(!in_array($obj->name, $existNames)) {
$filteredObjArr[$k] = $obj;
$existNames[] = $obj->name;
}
}
$objArray
是原始数组,$filteredObjArr
是您需要的。
如果'name'属性不公开,请使用method返回'name'而不是$obj->name
。例如:
$obj->getName(); //this method name is example
如果该类没有返回'name'的方法,则必须添加它:
Class OriginalClass {
//...something
// add
public function getName() {
return $this->name;
}
}
如果您不想更改原始课程,请将其扩展:
Class ExtendedClass extends OriginalClass {
public function getName() {
return $this->name;
}
}