我目前在我的网站上收到这些错误:
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_dump输出:
bool(false) array(1) { [2]=> int(3) }
我想知道问题是什么以及我如何解决它。谢谢!
答案 0 :(得分:1)
您的函数没有返回数组。假设他们在有数据的情况下返回数组,否则返回某种空(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));
这应该让它更清楚地了解实际发生的事情
答案 1 :(得分:0)
get_user_follows
不应该返回一个数组,它应该返回一个具有名为followers
的属性的对象。这是followers
属性,它不是一个数组,实际上因为$tmp
是FALSE
,它应该是对象。
get_user_follows
中的代码有一些保护条款,使其在某些条件下返回FALSE
。找出原因并纠正;)