2012-03-13 146 views
1

我有一个脚本,打印出数据库内的邮件。打破foreach循环php

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

我想只有用户与消息创建者的朋友,才能够查看消息。

脚本我是:

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。如果发现任何回路不是成为一个用户,它将继续......但它不是继续我希望它。我需要它跳过消息的整个输出,而不是继续第二个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()); 

     } 
+0

我建议你已经用你的查询来解决这个问题,只返回朋友的更新,而不是所有需要在PHP中过滤的更新。 – hakre 2012-03-13 17:20:23

+2

让我明白这一点。你需要摆脱第二个循环?如果您需要从中断出,请使用关键字“break”。我不想变得时髦,我可能会错过阅读,请您更好地指出问题! – Michael 2012-03-13 17:21:12

+0

对不起迈克尔,不要这样突出,我需要“跳过”当前循环,并继续其余的foreach循环。 很好,我会在一分钟内添加我的查询代码,因为我不确定如何通过查询来完成。我确实尝试过。 – 2012-03-13 17:25:50

回答

3

你必须在查询中加入消息和朋友表,并且在一次你有两个。

+0

我正在尝试做到这一点,但我无法弄清楚如何从朋友表中获取数组,然后在消息查询中使用它。例如,如果一个用户有1000个朋友呢? – 2012-03-13 17:32:02

+0

谢谢,我设法解决这个问题,它已经奏效。 – 2012-03-13 17:39:51

1

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

+0

我不完全确定你说什么时你说的设置一个标志。您能否提供更多的建议?谢谢 – 2012-03-13 17:23:58

+0

将变量设置为稍后检查的某个值。您使用的是哪本PHP书? – 2012-03-13 17:27:15

+0

@LightnessRacesinOrbit - 我的生活中没有使用过PHP书籍,因为我一直在过去的8年里一直坚持下去 – 2012-03-13 17:29:44

1

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

continue 2;

2参数控制其嵌套的循环将持续下去。

+0

yikes ..我没有意识到一个在php中的控制量。 – Michael 2012-03-13 17:22:37

+0

我刚刚尝试过这一点,它缺少很多消息,包括用户自己创建的消息。 – 2012-03-13 17:24:34

+0

@迈克尔:为什么?此功能清楚地记录在http://php.net/manual/en/control-structures.continue.php – 2012-03-13 17:26:19