tags:

views:

262

answers:

2

I have an object like this:

class FanStruct{
    public $date; 
    public $userid;

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

I have maximum of 30 of them in an array, and they are sorted by $userid.

What is the best way to go though the array, and remove duplicate objects based on $userid (ignoring $date)?

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

Requires a temporary variable, but works.

altCognito
+1, This should work also.
Malfist
+5  A: 

Here's a simple test that at least should get you started. Your __toString method might need to be more elaborate to generate uniqueness for your instances of 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>
Peter Bailey
+1, I like it. Never thought of trying it that way.
altCognito
it's supposed to ignore the date object, but this works.
Malfist