2013-02-26 4 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); 

Unfortunatelly мне нужен массив старого типа объектов.

+0

Вы можете использовать 'array_walk' с обратным вызовом ... –

+0

И если есть несколько объектов с тем же именем, что должно произойти? – Jon

+0

Если несколько объектов с одинаковым именем должны быть только одним из них в массиве. – Smash

ответ

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(), но я не пробовал. –

+0

У меня нет похожих объектов, у меня есть объекты с 2 подобными свойствами и 1 разные. Поэтому мне нужно сравнивать только эти свойства. – Smash

+0

обновлено, надеюсь, что это будет лучший пример. – Smash

Смежные вопросы