使用Foreach的唯一数组值


Unique Array Values Using Foreach

我有这个数组

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

最好的方法是不使用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) {

用于检查标题是否相同以及CCD_ 3对象是否属于相同实例。