我有两个包含朋友对象的数组。我想找到彼此匹配的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
方法,但我不知道如何在对象数组中实现它。
答案 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;
}
}