2012-03-13 5 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 

Первый Еогеасп берет данные из массива 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()); 

     } 
+0

Я предлагаю вам решить это с вашим запросом уже, чтобы возвращать только обновления друзей, а не все обновления, которые необходимо фильтровать в PHP. – hakre

+2

позвольте мне понять это прямо. вам нужно вырваться из второго цикла? Если вам нужно «вырваться» из него, используйте ключевое слово «break». Я не пытаюсь быть нахальным, возможно, я пропустил его чтение, не могли бы вы лучше задать вопрос? – Michael

+0

Извините, Майкл, не вырваться как таковой, мне нужно «пропустить» текущий цикл и продолжить с остальными петлями foreach. hakre, я добавлю свой код запроса через минуту, так как я не уверен, как я буду делать это через запрос. Я попытался. –

ответ

3

Вы должны объединить таблицы сообщений и друзей в запросе, и в одном снимке у вас есть оба.

+0

Я пытался сделать это раньше, но я не мог понять, как взять массив из таблицы друзей, а затем использовать его в запросе сообщений. Например, что, если у пользователя 1000 друзей? –

+0

Спасибо, мне удалось понять это, и это сработало. –

1

Установите флажок, когда вы continue, если этот флаг установлен -> не будет выводиться сообщение.

+0

Я не совсем уверен, что вы имеете в виду, когда говорите, чтобы установить флаг. Не могли бы вы предложить немного больше советов по этому поводу? Спасибо –

+0

Установка переменной на некоторое значение, которое вы позже проверяете. Какую книгу PHP вы используете? –

+0

@LightnessRacesinOrbit - Я не использовал книгу PHP в своей жизни, выбрал все, как я шел в течение последних 8 лет. –

1

Попробуйте пропустить свой первый цикл:

continue 2;

This 2 управления параметрами, которые из вложенных циклов будет продолжаться.

+0

yikes .. я не понял, сколько контроля goto у вас есть в php. – Michael

+0

Я только что попробовал это, и ему не хватает много сообщений, в том числе созданных самим пользователем. –

+0

@ Майкл: Почему? Эта функция четко задокументирована на http://php.net/manual/en/control-structures.continue.php –

Смежные вопросы