2012-04-27 9 views
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" 
} 
+0

これらの複製オブジェクトや 'unset($ arr [2])'部分だけを探すコードを探していますか? –

+0

@Alon、検索するコード。 – kylex

答えて

2

オブジェクトの '名前' プロパティの場合はこのように、公開されている:

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

$objArrayは、元の配列で、$filteredObjArrは何が必要です。

'name'プロパティがpublicでない場合は、$obj->nameの代わりに '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; 
    } 
} 
+0

これはうまくいくとは思わない。名前の配列はどこから来ますか?プラス私はオブジェクトの配列を持っています... – kylex

+0

@kylex申し訳ありませんが、配列としてオブジェクトを間違えました。私はただ更新しました – tosin

+0

'$ v'は何ですか? – kylex