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。更新了更合适的代码。我太马虎了。