2012-03-01 34 views
0

我有下面的代码,但是,我在我的代码中出现错误。 我找不到问题,但我认为它来自: UserManagement :: findByUsername($ username);无效的参数foreach()

$a_allSections = UserManagement::findByUsername($username); 
    if($a_allSections) 
    { 
     foreach($a_allSections as $a_section) 
     { 
       echo $a_section['name'];?> 
     } 
    } 
    else 
    { 
     echo 'There's nothing found.' . "\n"; 
    } 
+0

什么类型是你的'$ a_allSections'这样的错误? – hsz 2012-03-01 10:30:40

+1

更好的检查可能是'if(is_array($ a_allSections))' – 2012-03-01 10:30:51

+0

@andreas,返回的对象可以是包含迭代器的对象。 – hsz 2012-03-01 10:31:56

回答

1

显然$a_allSections不是数组,所以foreach抱怨。使用var_dump($a_allSections)找出究竟是什么,并相应地修复你的代码。

1

检查这样

UserManagement :: findByUsername($用户名);

1.功能findByUsername($用户名)应该返回一些值

2.类应包含当前文件内。

3.检查你的返回结果是否为数组。如果数组意味着检查is_array();

4.如果上面3在你的问题确定那么你不会得到错误。

0

$ a_allSections可能是空的

变化条件

if(is_array($a_allSections)){ 
     ... 
    } 

,以防止对空数组

+1

-1:他已经有一个检查('if($ a_allSections)')that [ensure](http: //php.net/manual/en/language.types.boolean.php)该数组(如果它是一个数组)不会为空。即使它*是一个空数组,PHP也不会给出警告。 – Jon 2012-03-01 10:46:26

+0

如果返回一个对象或某个字符串或某个整数,该怎么办?可能来自findByUsername方法中的一些错误。如果($ a_allSections)不检查它的数组是否只是查看if条件中的变量是否具有某个值。说得通? – Junaid 2012-03-01 11:03:17

+0

显然这个变量不是一个数组,否则这个问题就不会被问到。但是处理这个问题的正确方法是找出*为什么*它不是数组,不会将代码放在不会执行的'if'内。 – Jon 2012-03-01 11:10:45