2012-04-07 73 views
0

我有這樣的陣列獨特陣列值使用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(),這是因爲該對象不能被轉換成字符串

+0

你試過'(array)'cast嗎? – alex 2012-04-07 03:30:44

+0

是的,它dosent工作可捕獲的致命錯誤:類職位的對象無法轉換爲字符串... – Ben 2012-04-07 03:43:46

+0

這是來自數據庫?如果是這樣,你可以調整查詢以避免重複? – bfavaretto 2012-04-07 03:46:40

回答

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對象是相同的實例。