2013-02-26 23 views
2

我有對象的數組,但我需要從他們身上除去由幾個性質相似的對象:從數組中刪除類似的對象?

例如:

array(12) { 
    [0]=> 
    object(stdClass)#848 (5) { 
    ["variant"]=> 
    object(stdClass)#849 (4) { 
     ["name"]=> 
     string(8) "Alex"  
    } 
    ["age"]=> 
    int(10) 
    } 
    [1]=> 
    object(stdClass)#851 (5) { 
    ["variant"]=> 
    object(stdClass)#852 (4) { 
     ["name"]=> 
     string(8) "Alex" 
    } 
    ["age"]=> 
    int(10) 
    } 

如何使一個對象數組本(如果例如,我只需要通過名稱屬性進行比較?)

仍然有問題。

更新

我已經創建對象的一個​​新的數組:

$objects = array(
    (object)array('name'=>'Stiven','age'=>25,'variant'=>(object)array('surname'=>'Sigal')), 
    (object)array('name'=>'Michael','age'=>30,'variant'=>(object)array('surname'=>'Jackson')), 
    (object)array('name'=>'Brad','age'=>35,'variant'=>(object)array('surname'=>'Pit')), 
    (object)array('name'=>'Jolie','age'=>35,'variant'=>(object)array('surname'=>'Pit')), 
); 
echo "<pre>"; 
print_r($objects); 

所以我需要做的是要比較的對象屬性(variant->姓氏和年齡),如果兩個對象具有相似的年齡和變體 - >姓氏,我們需要刪除這些對象中的一個。

solution半是:

$tmp = array(); 
foreach ($objects as $item=>$object) 
{ 
    $tmp[$object->variant->surname][$object->age] = $object; 
} 

print_r($tmp); 

可惜的是我需要的對象的舊式陣列。

+0

您可以使用帶引號的'array_walk'有回調... – 2013-02-26 10:14:01

+0

如果有多個對象具有相同的名稱會發生​​什麼? – Jon 2013-02-26 10:18:16

+0

如果具有相同名稱的多個對象必須只是其中一個數組。 – Smash 2013-02-26 10:25:31

回答

0

我找到了一個例子。

<?php 
$a = array ( 
    0 => array ('value' => 'America',), 
    1 => array ('value' => 'England',), 
    2 => array ('value' => 'Australia',), 
    3 => array ('value' => 'America',), 
    4 => array ('value' => 'England',), 
    5 => array ('value' => 'Canada',), 
); 

$tmp = array(); 

foreach ($a as $row) 
    if (!in_array($row,$tmp)) array_push($tmp,$row); 

print_r ($tmp); 
?> 

here

+0

也有array_unique()函數,但我沒有嘗試它。 – 2013-02-26 10:26:28

+0

我沒有一個非常相似的對象,我有一個與2個相似的屬性和1個不同的對象。所以我只需要通過這些屬性進行比較。更新了 – Smash 2013-02-26 10:44:36

+0

,希望這會是更好的例子。 – Smash 2013-02-26 11:45:37