3

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
  • Although this is an old question and there's already a good accepted answer, it's worth mention you can (and should) use SORT_REGULAR as explained here: stackoverflow.com/a/18203564/1412157 Commented Apr 7, 2016 at 8:23

2 Answers 2

8

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 ) );

?>
Sign up to request clarification or add additional context in comments.

1 Comment

Since 5.2.9 you don't need the __toString() anymore, it will work based on (object)$x == (object)$y comparisons when you use SORT_REGULAR.
1
$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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.