0

我有这个数组

Array 
( 
    [0] => posts Object 
        ( 
            [title] => test1 
            [dbh] => DataBase Object 
                  ( 
                      [dbh] => PDO Object ( ) 
                  ) 
        )

    [1] => posts Object 
        ( 
            [title] => test1 
            [dbh] => DataBase Object 
                  (
                      [dbh] => PDO Object ( ) 
                  ) 
        )

    [2] => posts Object 
        ( 
            [title] => test2 
            [dbh] => DataBase Object 
                  (
                      [dbh] => PDO Object ( ) 
                  ) 
        )
)

我不能使用array_unique(),因为对象不能转换为字符串

4

1 回答 1

0

最好的方法是不使用 foreach。您应该用于:

for ($i = 0; $i < count($array); $i++) {
  for ($j = $i + 1; $j < count($array); $j++) {
    if ($array[$i] === $array[$j]) {
      unset($array[$j]);
      $array = array_values($array);
    }
  }
}

Foreach 会复制您的数组并在副本上循环,这使得跟踪哪些重复项已被测试/删除变得更加复杂。

上面的代码将检查您的post对象是否属于同一实例,如果是,则删除它们。您可能想检查它们是否包含相同的数据,但不是同一个实例。然后您将不得不if稍微扩展该行:

if ($array[$i]->title === $array[$j]->title && $array[$i]->dbh === $array[$j]->dbh) {

...用于检查标题是否相同并且DataBase对象是否属于同一实例。

于 2012-04-07T03:44:27.057 回答