首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的foreach循环没有像预期的那样工作?

问为什么我的foreach循环没有像预期的那样工作?
EN

Stack Overflow用户
提问于 2014-08-01 06:39:35
回答 1查看 382关注 0票数 0

我是PHP开发的新手,但我认为我学得很快,但当我从XAMPP转到真正的主机上时,我遇到了一个小问题。我正试着做这样的事情。

代码语言:javascript
复制
$cast_list = mysqli_query($dblink, $sql);
foreach ($cast_list as $role)
{
    echo "<tr><td width='50%'>".$role['appeared_as']."</td>";
}

它在XAMPP上工作,我已经安装在我的家庭PC上,但它不能在我安排测试的主机上工作。实际的查询运行良好,所以这不是问题所在。我可以在PHPMyAdmin中看到正确的结果,在XAMPP上,当我按如下方式修改代码时。

代码语言:javascript
复制
$cast_list = mysqli_query($dblink, $sql);
$y = mysqli_num_rows($cast_list);
for ($x = 0; $x <$y; $x++)
{
    $role = mysqli_fetch_assoc($cast_list);
    echo "<tr><td width='50%'>".$role['appeared_as']."</td>";
}

第二个代码块将产生所需的效果。第一个代码块显然会迭代5次,但不会包含任何有意义的数据。实际上,第一个代码块的var_dump($role)表明它是NULL。

如果需要的话,我可以适应它,但也许有一个逻辑原因导致foreach不适合我?

EN

回答 1

Stack Overflow用户

发布于 2014-08-01 06:43:21

mysqli_query()不返回可以与foreach()一起使用的数组或数组对象。mysqli_query()的返回类型是一个资源。您可以在循环中从中获取数据,就像您的第二个解决方案一样。

使用while()比使用for()更简单:

代码语言:javascript
复制
$cast_list = mysqli_query($dblink, $sql);
while ($role = mysqli_fetch_assoc($cast_list)) {
    echo "<tr><td width='50%'>".$role['appeared_as']."</td>";
}

当在结果集的末尾提取的行为NULL时,循环将自动终止。在循环之前,您不需要知道行数。

请回复您的评论:

在looking up some facts之后,我不得不承认我上面的答案并不完全正确。或者对于某些版本的PHP来说不是真的。

在PHP5.4中,mysqli_result资源添加了Iterator功能,实际上你可以在foreach()中使用它。但是您的主机显然使用的是较旧版本的PHP。

最佳实践是在您将部署到的所有软件的相同版本上进行开发,这样您就不会遇到这种意外。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25070098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档