如何在PHP中删除对象数组中的重复项?

3

I have an object like this:

class FanStruct{
    public $date; 
    public $userid;

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

我有一个数组,最多有30个元素,它们按照$userid进行排序。

什么是最好的方法来遍历数组,并根据$userid(忽略$date)删除重复的对象?


虽然这是一个老问题,并且已经有一个很好的被接受的答案,但值得一提的是,您可以(并且应该)使用SORT_REGULAR,如此处所述:https://dev59.com/lXE95IYBdhLWcg3wKqyq#18203564 - LucaM
2个回答

8
这里有一个简单的测试,至少可以帮助你开始。你的 __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 ) );

?>

自从5.2.9版本以后,你不再需要使用__toString()函数了。当你使用SORT_REGULAR排序时,它会基于(object)$x == (object)$y的比较进行操作。 - Ja͢ck

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

需要一个临时变量,但是可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接