Php function.array-diff问题!

Php function.array-diff问题!,php,arrays,Php,Arrays,我目前在我的网站上遇到以下错误: 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 l

我目前在我的网站上遇到以下错误:

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
资料来源如下:

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)));
以下是var_转储输出:

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

我想知道问题出在哪里以及如何解决。谢谢

您的函数没有返回数组。假设它们在有数据时返回数组,否则返回某种空(null或false)值,简单的强制转换可能会起作用:

$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)));
但更好的是,将此作为诊断:

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

这应该让我们更清楚地知道实际发生了什么

get\u user\u follows
不应该返回数组,它应该返回一个名为
followers
的属性的对象。不是数组的
followers
属性,这实际上是因为
$tmp
应该是
FALSE


get\u user\u following
中的代码有一些保护子句,在某些条件下使其返回
FALSE
。找出原因并纠正;)

$this->network->get\u user\u follows($this->user->id)未返回数组。什么是var_dump($tmp)?方法调用中出现错误,它可能返回一个值来表示错误。我们必须知道var_dump($this->user->id)和$this->network->get_user_下面的代码来帮助我们。我得到bool(false)数组(1){[2]=>int(3)}作为结果有什么建议吗?这是错误的。如果
$tmp
是数组,则不能调用
$tmp->followers
<代码>$tmp必须是对象。原始代码中存在一些可怕的变量重新分配,类型冲突。很好的调用,d11wtq。更新了更合适的代码。我太马虎了。