数组与对象数组相交

时间:2015-06-30 03:59:04

标签: php

我有两个包含朋友对象的数组。我想找到彼此匹配的ID来实现共同的朋友功能。如果使用PHP太复杂了,也许我会用mysql的方式来做。

这些是示例数组项:

$array1 = array(1) {
["friends_list"]=>
array(3) {
[0]=>
object(stdClass)#29 (8) {
  ["notifica_ID"]=>
  string(4) "2673"
}
[1]=>
object(stdClass)#30 (8) {
  ["notifica_ID"]=>
  string(4) "3532"
}
[2]=>
object(stdClass)#31 (8) {
  ["notifica_ID"]=>
  string(4) "3649"
}
}
}

$array2 = array(1) {
["friends_list"]=>
array(5) {
[0]=>
object(stdClass)#32 (8) {
  ["notifica_ID"]=>
  string(4) "1679"
}
[1]=>
object(stdClass)#33 (8) {
  ["notifica_ID"]=>
  string(4) "2137"
}
[2]=>
object(stdClass)#35 (8) {
  ["notifica_ID"]=>
  string(4) "3186"
}
[3]=>
object(stdClass)#36 (8) {
  ["notifica_ID"]=>
  string(4) "3187"
}
[4]=>
object(stdClass)#37 (8) {
  ["notifica_ID"]=>
  string(4) "3649"
}
}
}

我希望结果是:

$result = array(1) {
["friends_list"]=>
array(1) {
[0]=>
array(
  ["notifica_ID"]=>
  string(4) "3649"
)
}
}

我已经尝试了array_intersect方法,但我不知道如何在对象数组中实现它。

2 个答案:

答案 0 :(得分:2)

不是直接的解决方案,但这将有效..

$new_array1 =   obj_to_array( $array1["friends_list"] );
$new_array2 =   obj_to_array( $array2["friends_list"] );

$temp_result    =   array_uintersect( $new_array1, $new_array2, 'compare_values' );

$result =   array( "friends_list" => $temp_result );

function obj_to_array( $input1 )
{
    foreach( $input1 as $new )
        $temp_array[]   =   (array)$new;

   return $temp_array;
}
function compare_values($input1, $input2)
{
   return strcmp($input1['notifica_ID'], $input2['notifica_ID']);
}

$result正是您所期待的。

答案 1 :(得分:0)

我决定把id放在其他数组中。然后执行array_intersect方法。 这是我的答案。

public function mutual_friends($my_ID = '' ,$friend_ID = ''){
    if($friend_ID != '' OR $my_ID != ''){
        $myfr = $this->get_friends($my_ID);
        $frofmy = $this->get_friends($friend_ID);            
        $array1 = array();
        $array2 = array();
        foreach($myfr['friends_list'] as $row){
            $array1[] = $row->notifica_ID;
        }
        foreach($frofmy['friends_list'] as $row){
            $array2[] = $row->notifica_ID;
        }
        $result = array_intersect($array1,$array2);
        if(count($result) > 0){
            $mf = array();
            $i = 0;
            foreach($myfr['friends_list'] as $row){
                foreach($result as $row1){
                    if($row1 == $row->notifica_ID){
                        $mf[$i]['notifica_ID'] = $row->notifica_ID;
                        $i++;
                    }
                }
            }
            return $mf;
        }
        else{
            return false;
        }
    }else{
        return false;
    }
}