Выбрать из двух массивов уникальные значения

Тема в разделе "PHP", создана пользователем funest, 17 май 2011.

Модераторы: latteo
  1. funest

    funest Постоялец

    Регистр.:
    2 июл 2007
    Сообщения:
    145
    Симпатии:
    38
    Привет.
    Есть два массива:
    Первый массив
    PHP:
    Array ( 
    [
    0] => stdClass Object ( [ID] => 1602 [post_author] => 
    [
    1] => stdClass Object ( [ID] => 1477 [post_author] => 
    [
    2] => stdClass Object ( [ID] => 1476 [post_author] => 
    etc.)
    Второй массив
    PHP:
    Array ( 
    [
    0] => stdClass Object ( [ID] => [ID_post] => 1476 [ID_user] => 
    [
    1] => stdClass Object ( [ID] => [ID_post] => 1477 [ID_user] => ) )
    Нужно их сравнить и оставить только уникальные значения ID (во втором массиве ID_post), в данном случае должен остаться только первый элемент первого массива.
    array_diff() с объектами не работает
     
  2. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    http://www.php.net/manual/en/function.get-object-vars.php
     
  3. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
  4. funest

    funest Постоялец

    Регистр.:
    2 июл 2007
    Сообщения:
    145
    Симпатии:
    38
    Мне два массива надо сравнить, структуру которых я выше привел, а не значения объектов в одном.
    Причем сравнивать надо ID с ID_post.
     
  5. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    а,ну, так надо поточнее писать что надо) правильно было бы "сравнить 2 массива в котором хранятся объекты, по значениям id, author_id, оставить только уникальные и только те, которые есть в обоих объектах."

    PHP:
    $data1[0]= new ArrayObject;
    $data1[1]= new ArrayObject;
    $data1[2]= new ArrayObject;

    $data1[0]->id 1;
    $data1[1]->id 22;
    $data1[2]->id 222;

    $data2[0]= new ArrayObject;
    $data2[1]= new ArrayObject;
    $data2[2]= new ArrayObject;
     
    $data2[0]->a_id 1;
    $data2[1]->a_id 33;
    $data2[2]->a_id 333;



    function 
    diffInObj($arr1$arr2$pole1$pole2){
     
    $ids2 = array(); 
    //$new_data = array();   
    foreach($arr2 as $arr_id=>$obj){
      
    $ids2 [$obj->$pole2] = 1;
    }    
     
    foreach(
    $arr1 as $arr_id=>$obj){
      if(!isset(
    $ids2[$obj->$pole1])){
        unset(
    $arr1[$arr_id]);
      }
       unset(
    $ids2[$obj->$pole1]); // только уникальные по полю $pole1
    }    
       return 
    $arr1;
        
    }

    print_r(diffInObj($data1$data2'id''a_id'));
     
    funest нравится это.
  6. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    funest нравится это.