2014-11-26 5 views
0

Я нашел этот маленький кусочек php-кодов, который соответствует моим требованиям.Позиционирование else condition в php

<?php 
$allDocs = mysql_query("SELECT id, parent FROM modx_site_content ORDER BY id DESC"); 
while($doc = mysql_fetch_assoc($allDocs)) { 
$parent = mysql_query("SELECT id FROM modx_site_content WHERE parent = " . $doc['id'] . " AND id = " . $doc['parent']); 
if(mysql_num_rows($parent)) { 
while($parentDoc = mysql_fetch_assoc($parent)) { 
echo 'Infinte loop found<br /><br />'; 
echo 'Document #' . $doc['id'] . ' and document #' . $parentDoc['id'] . ' are each others parent.'; 
} 
}  
} 
?> 

Я пытался ставить условие еще так:

<?php 
$allDocs = mysql_query("SELECT id, parent FROM modx_site_content ORDER BY id DESC"); 
while($doc = mysql_fetch_assoc($allDocs)) { 
$parent = mysql_query("SELECT id FROM modx_site_content WHERE parent = " . $doc['id'] . " AND id = " . $doc['parent']); 
if(mysql_num_rows($parent)) { 
while($parentDoc = mysql_fetch_assoc($parent)) { 
echo 'Infinte loop found<br /><br />'; 
echo 'Document #' . $doc['id'] . ' and document #' . $parentDoc['id'] . ' are each others parent.'; 
} 
} 
else { 
    echo 'No loop found'; 
} 
} 
?> 

Но он идет в то время цикла. Где подходящее место, чтобы поставить условие else?

+0

Как условие ELSE должно прекратить поток программы для ввода второго цикла? Условным является то, получили ли вы результаты второго запроса. – Deleteman

+0

Означает ли это, что мне нужно в конце концов где-то посередине раньше? – Santosh

+0

Что именно вы хотите сделать? Печать «Нет петли найдена», если результатов нет? Если это так, ваш код правильный, вам просто нужно убедиться, что этот запрос: «$ parent = mysql_query (« SELECT id FROM modx_site_content WHERE parent = ». $ Doc ['id']." AND id = ". $ док [ 'родитель']);» не дает результатов, чтобы попробовать. – Deleteman

ответ

0

отступов было решение:

<?php 
$allDocs = mysql_query("SELECT id, parent FROM modx_site_content ORDER BY id DESC"); 
while($doc = mysql_fetch_assoc($allDocs)) { 
    $parent = mysql_query("SELECT id FROM modx_site_content WHERE parent = " . $doc['id'] . " AND id = " . $doc['parent']); 
    if(mysql_num_rows($parent)) { 
     while($parentDoc = mysql_fetch_assoc($parent)) { 
      echo 'Infinte loop found<br /><br />'; 
      echo 'Document #' . $doc['id'] . ' and document #' . $parentDoc['id'] . ' are each others parent.'; 
     } 
    } else { 
     //Your Code Here 
     break; 
    } 
} 
?> 

еще в случае, если внутри первого цикла, но не второй.

Редактировать: Добавлена ​​перерыв для выхода из цикла.

+0

Он все еще идет в цикле. – Santosh

+0

Это точно так, как вы хотите. Если внутри цикла, то else находится внутри цикла. –

+0

В любом случае я могу избежать цикла while для Марко? – Santosh

0

Пожалуйста, задумайтесь о своем кодеке перед отправкой вопроса. Легче читать ...

Похоже, что инструкция else находится правильно. Посмотрите на ваши while-statements. Возможно, код никогда не достигает инструкции if-else, потому что первый цикл while завершает работу до того, как if-statemnt получает значение false. Или, пока первый цикл работает, вы всегда получите строку с оператором

$parent = mysql_query("SELECT id FROM modx_site_content WHERE parent = " . $doc['id'] . " AND id = " . $doc['parent']); 
+0

Хорошо, я буду помнить об этом. – Santosh