2012-04-07 71 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对象是相同的实例。