1

同じ名前のオブジェクトの配列から要素を削除して、一度だけ存在するようにするにはどうすればよいですか?

以下の例では、名前が要素 0 と同じであるため、要素 2 を削除したいと考えています (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' プロパティが public の場合、次のようになります。

$filteredObjArr = array();
$existNames = array();
foreach($objArray as $k => $obj) {
  if(!in_array($obj->name, $existNames)) {
    $filteredObjArr[$k] = $obj;
    $existNames[] = $obj->name;
  }
}

$objArray元の配列であり、$filteredObjArr必要なものです。

「名前」プロパティが公開されていない場合は、メソッドを使用して、代わりに「名前」を返し$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 に答える