[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сравнение объектов
Stasonix
Массив:

$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->surname и age? Точнее не удалить, а оставить один из них, т.е. чтобы таких одинаковых элементов не было в массиве.
waldicom
сериализируйте и array_unique.
Это в том случае, если все-равно, какой нужен и если массивы не большие. Потому что затраты на сериализацию заметны. Но можно поставить igbinary, тогда все станет лучше.

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Stasonix
А при чем тут array_unique к сериализованному объекту?
waldicom
Цитата (Stasonix @ 26.02.2013 - 13:37)
А при чем тут array_unique к сериализованному объекту?

мне кажется ответ очевиден - в конце останется только один (из одинаковых) smile.gif

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Stasonix
Для того чтобы удалить один из одинаковых объектов не обязательно все свойства должны совпадать, вера в array_unique еще есть?
Valick
Stasonix, каким образом у вас формируются объекты?

_____________
Стимулятор ~yoomoney - 41001303250491
Stasonix
Цитата (Valick @ 26.02.2013 - 12:46)
Stasonix, каким образом у вас формируются объекты?

с нескольких источников, к сожалению.
waldicom
Цитата (Stasonix @ 26.02.2013 - 13:40)
Для того чтобы удалить один из одинаковых объектов не обязательно все свойства должны совпадать, вера в array_unique еще есть?

А, вам нужно "...которые имеют одинаковые variant->surname и age...", ок, согласен, полная сериализация не подойдет.
Но ничего не мешает сделать это для тех полей, которые нужны.

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
SlavaFr

<?php
error_reporting(E_ALL);

class UniqueMyArrayObject {

private $array;
private $count;

public function __construct(array $MyObjectArray)
{
$this->setArray($MyObjectArray);
}

public function setArray(array $MyObjectArray)
{
$this->array = $MyObjectArray;
$this->count = count($this->array);
}

public function getUnique()
{
$result = array();
for ($i=0; $i<$this->count; $i++) {
$current = $this->array[$i];
if ($this->isSetWithSameSurnameAndAge($i + 1,$current)) {
continue;
}
$result[] = $current;
}
return $result;
}

private function isSetWithSameSurnameAndAge($from,$current)
{
for($i=$from;$i<$this->count; $i++) {
$element = $this->array[$i];
if($element->age == $current->age
&& $element->variant->surname == $current->variant->surname ) {
return true;
}
}

return false;
}
}



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


$uniqueMaker = new UniqueMyArrayObject($objects);

$result = $uniqueMaker->getUnique();

print_r($result);


_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.