2009-06-26 16 views
2

私はこのようなオブジェクトを持っている:PHPのオブジェクト配列で重複を削除するにはどうすればよいですか?

class FanStruct{ 
    public $date; 
    public $userid; 

    function __construct($date, $id){ 
     $this->date = $date; 
     $this->userid = $id; 
    } 
} 

私は配列でそれらの30の最大を持っており、それらは$useridによって並べ替えられています。

$userid$dateは無視)に基づいて重複したオブジェクトを削除するにはどうすればよいでしょうか?

+0

これは古い質問ですが、既に良い答えがありますが、ここで説明するようにSORT_REGULARを使うことができます://stackoverflow.com/a/18203564/1412157 – LucaM

答えて

7

ここには、少なくともあなたを始めなければならない簡単なテストがあります。あなたの__toStringメソッドは、FanStructのインスタンスの一意性を生成するためにより精巧である必要があります

<?php class FanStruct{ public $date; public $userid; function __construct($date, $id){ $this->date = $date; $this->userid = $id; } public function __toString() { return $this->date . $this->userid; } } $test = array( new FanStruct('today', 1) ,new FanStruct('today', 1) ,new FanStruct('tomorrow', 1) ); print_r(array_unique($test)); ?> </pre>
+0

+1、私はそれが好きです。そのように試してみることは決してありませんでした。 – cgp

+0

日付オブジェクトを無視することになっていますが、これは機能します。 – Malfist

+0

5.2.9以降、 '__toString()'はもう必要ないので、 '(オブジェクト)$ x ==(オブジェクト)$ y'の比較に基づいて動作します。 –

1
$temp = array($fans[$x]); 
for(var $x=1;$x<sizeof($fans);$x++) { 
    if ($fans[$x]->userid != $fans[$x]->userid) 
    $temp[] = $fans[$x]; 
} 

一時変数が必要ですが動作します。

+0

+1、これも動作するはずです。 – Malfist

関連する問題