使用Foreach的唯一数组值

时间:2012-04-07 03:25:02

标签: php arrays

我有这个数组

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(),因为该对象不能转换为字符串

1 个答案:

答案 0 :(得分: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个对象属于同一个实例。