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 に答える