function.array-diff问题!

im currently getting these error on my site:

Warning: array_keys() [function.array-keys]: The first argument should be an array on line 43

Warning: Invalid argument supplied for foreach() on line 44

Warning: array_diff() [function.array-diff]: Argument #1 is not an array on line 47

Warning: array_diff() [function.array-diff]: Argument #1 is not an array on line 48

And the source are:

42.        $tmp = $this->network->get_user_follows($this->user->id);
43.     $tmp    = array_keys($tmp->followers);
44.     foreach($tmp as &$v) { $v = intval($v); }
45.     $tmp2   = array_keys($this->network->get_group_members($g->id));
46.     foreach($tmp2 as &$v) { $v = intval($v); }
47.     $tmp    = array_diff($tmp, $tmp2);
48.     $tmp    = array_diff($tmp, array(intval($this->user->id)));

Here is the var_dump output:

bool(false) array(1) { [2]=> int(3) } 

I want to know what is the problem and how i fix it. Thanks!

Your functions aren't returning arrays. On the assumption they return arrays when there's data to be had, and some sort of empty (null or false) value otherwise, a simple cast may work:

$tmp    = $this->network->get_user_follows($this->user->id);
$tmp    = isset($tmp->followers) && is_array($tmp->followers) ? array_keys($tmp->followers) : array();
foreach($tmp as &$v) { $v = intval($v); }
$tmp2   = array_keys((array)$this->network->get_group_members($g->id));
foreach($tmp2 as &$v) { $v = intval($v); }
$tmp    = array_diff($tmp, $tmp2);
$tmp    = array_diff($tmp, array(intval($this->user->id)));

But even better, do this as a diagnostic:

var_dump($this->network->get_user_follows($this->user->id), $this->network->get_group_members($g->id));

This should make it a lot more clear what's actually going on

get_user_follows is not supposed to return an array, it's supposed to return an object which has a property called followers. It's the followers property that's not an array, and that's actually because $tmp is FALSE when it should be said object.

The code in get_user_follows has some guard clause that is making it return FALSE under some condition. Figure out why and correct that ;)