2012-07-13 151 views
-1

我需要帮助抑制,我从foreach()如何抑制的foreach()警告PHP的

Warning: Invalid argument supplied for foreach() in 
/sitename/pages/admin/questions/index.php 

让我得到我想要的结果的警告。所有我需要的是删除警告...

这是我的代码:

for($i = 1; $i <= $RESULTS_count; $i++){ 

$rawResult = $wpdb->get_row(
       $wpdb->prepare("SELECT * FROM ".WPSQT_TABLE_RESULTS." WHERE id = $i"),ARRAY_A); 

$rawResult['sections'] = unserialize($rawResult['sections']); 

    foreach($rawResult['sections'] as $result_sections){ 
     if($result_sections['answers'][1]['mark'] == 'correct') $correct_answer++; 
    } 
} 
echo $correct_answer/$RESULTS_count; 

如果我把代码出了FOR循环,并与WHERE id = 1取代WHERE id = $i它会工作......莫非问题是FOREACH不喜欢在FOR循环中?

你认为我应该怎么做?

编辑:我觉得我得到的警告是由于我删除了ID 2的结果,所以当循环遍历表行时,其中一个是空的,这就是我得到的警告.. 。

+11

为什么不修改代码清除警告? – Gntem 2012-07-13 16:05:48

+0

我不认为我可以因为我的数据... – Radi 2012-07-13 16:07:37

+0

你可以发布var_dump($ rawResult ['sections'])的输出吗? *之后*你反序列化数据? – Gntem 2012-07-13 16:12:23

回答

3

您应该确保数据是数组或数据类型转换为数组。

是数组:

if (is_array($rawResult['sections'])) { 
     foreach ($rawResult['sections'] as $result_sections) { 
      if ($result_sections['answers'][1]['mark'] == 'correct') 
       $correct_answer++; 
     } 
    } 

类型转换:

foreach ((array) $rawResult['sections'] as $result_sections) { 
     if ($result_sections['answers'][1]['mark'] == 'correct') 
      $correct_answer++; 
    } 
+0

类型转换作品!非常感谢! – Radi 2012-07-13 16:11:27