通过比较项的节点来唯一的数组

时间:2014-01-29 14:49:41

标签: php

我想删除对象数组的重复对象。例如,我有一个像这样的数组:

array
  0 => 
    object(stdClass)
      public 'object_id' => string '13' (length=2)
      public 'object_data' => float 5
  1 => 
    object(stdClass)
      public 'object_id' => string '13' (length=2)
      public 'object_data' => float 5
      public 'random_data' => float 15
  2 => 
    object(stdClass)
      public 'object_id' => string '14' (length=2)
      public 'object_data' => float 25
      public 'random_data' => float 35

我正在使用这个功能

array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )

删除重复的对象,但我上面的那些不相同,所以我想知道是否可以根据特定节点“ object_id ”删除那些重复的对象而不是比较完整的对象?

那可能吗?

同样在获得上述两个类似对象的情况下,我可以保留一个带有“ random_data ”的对象吗?

我应该使用循环并遍历所有对象,还是有办法用* array_unique *这样的函数来做?

谢谢

1 个答案:

答案 0 :(得分:0)

您可以尝试:

$input  = array( /* your array of objects */ );
$output = array();

foreach ( $input as $obj ) {
  $id = $obj->object_id;
  if ( !isset($output[$id]) ) {
    $output[$id] = array();
  }

  $output[$id] = (object) array_merge((array) $output[$id], (array) $obj);
}