1

如何从具有相同名称的对象数组中删除元素,使其仅存在一次?

在下面的情况下,我想删除元素 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"  
 } 
4

1 回答 1

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' 属性不是公共的,则使用方法返回 'name' 而不是$obj->name. 例如:

$obj->getName(); //this method name is example

如果该类没有返回“名称”的方法,则必须添加它:

Class OriginalClass {

    //...something

    // add
    public function getName() {
        return $this->name;
    }
}

如果您不想更改原始课程,请扩展它:

Class ExtendedClass extends OriginalClass {
    public function getName() {
        return $this->name;
    }
}
于 2012-04-27T18:22:18.323 回答