function.array-diff问题!

时间:2010-04-25 05:54:43

标签: 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 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) } 

我想知道问题是什么以及我如何解决它。谢谢!

2 个答案:

答案 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属性,它不是一个数组,实际上因为$tmpFALSE,它应该是对象。

get_user_follows中的代码有一些保护条款,使其在某些条件下返回FALSE。找出原因并纠正;)