【问题标题】:Break out of foreach loop php打破foreach循环php
【发布时间】:2012-03-13 17:17:44
【问题描述】:

我有一个脚本可以从数据库中打印出消息。

每条消息都是由不同的用户编写的。

我希望只有与消息创建者成为朋友的用户才能查看消息。

我的脚本是:

foreach($updatesarray as $data)
 {
 $qu=mysql_query("SELECT frid FROM friends WHERE usid='$uid'")or die(mysql_error());
 $dataq=array();
 $qurow=mysql_fetch_array($qu);
 $dataq[]=$qurow['frid'];
foreach($dataq as $value){
  if($value!=$data['uid_fk'])
    continue;
}

/ Continues the output of the message

第一个 foreach 从 mysql 查询数组中获取数据。 然后在那个 foreach 中,我执行另一个 mysql 查询来识别当前登录用户的朋友列表。我将结果放入一个数组并创建一个新的 foreach。如果发现任何循环 NOT 是用户,它将继续......但它并没有按照我想要的方式继续。我需要它来跳过消息的整个输出,而不是继续第二个 foreach。

变量 $data['uid_fk'] 是存储在数据库中的消息创建者。

数据库查询:

if($viewtype=="friends"){
         $viewquery="M.uid_fk=U.uid";
         $query = mysql_query("SELECT M.msg_id, M.uid_fk, M.message, M.created,       U.username, U.firstname, U.middlename, U.surname, M.uploads FROM messages M, users U  WHERE     $viewquery $morequery order by M.msg_id desc limit " .$this->perpage) or     die(mysql_error());

        }

【问题讨论】:

  • 我建议你已经用你的查询来解决这个问题,只返回朋友的更新,而不是所有需要在 PHP 中过滤的更新。
  • 让我明白这一点。你需要打破第二个for循环吗?如果您需要break 退出它,请使用关键字break。我不是要时髦,我可能会错过阅读它,您能否更好地说明问题!
  • 对不起,迈克尔,没有这样爆发,我需要“跳过”当前循环并继续其余的 foreach 循环。 hakre,我将在一分钟内添加我的查询代码,因为我不确定如何通过查询来完成它。我试过了。

标签: php mysql foreach


【解决方案1】:

您必须在查询中加入消息表和好友表,并且一次性获得两者。

【讨论】:

  • 我之前尝试过这样做,但我不知道如何从朋友表中获取数组,然后在消息查询中使用它。例如,如果用户有 1000 个朋友怎么办?
【解决方案2】:

continue 时设置一个标志,如果设置了这个标志 -> 不输出消息。

【讨论】:

  • 我不完全确定您所说的设置标志是什么意思。您能否就此提供更多建议?谢谢
  • 将变量设置为稍后检查的某个值。你用的是哪本 PHP 书?
  • @LightnessRacesinOrbit - 我这辈子都没用过 PHP 书,我在过去 8 年里一直在学习它
  • @TelfordComputer-DoctorLtd:很抱歉听到这个消息。不过,它确实解释了为什么八年后您不知道如何使用变量进行流量控制。 :)
【解决方案3】:

试试这个跳过你的第一个循环:

continue 2;

2 参数控制哪些嵌套循环将继续。

【讨论】:

  • yikes.. 我没有意识到 php 中的 goto 控制量。
  • 我刚试过这个,它丢失了很多消息,包括用户自己创建的消息。
  • @Michael:为什么?此功能在php.net/manual/en/control-structures.continue.php 上有明确记录
  • @TelfordComputer-DoctorLtd:那你又做错了。
  • @LightnessRacesinOrbit 我通常在需要时采取学习的方法。我在这里学到了。我不知道我是否喜欢它,但我学到了很多。
猜你喜欢
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
相关资源
最近更新 更多