2012-03-24 133 views
-2

首先,我知道标题是通用的并且不适合。我无法想象一个能够描述我的问题的标题。如何优化PHP中的foreach循环

我有MySQL中的表结构收件人像这样:

id | email | status 
1  [email protected]   S 
2  [email protected]   S 
3  [email protected]   R 
4  [email protected]   B 

我需要将数据转换成以下XML,这取决于状态场。例如:

<Recipients> 
    <RecipientsSent> 
     <!-- Have the 'S' status --> 
     <recipient>[email protected]</recipient> 
     <recipient>[email protected]</recipient> 
    </RecipientsSent> 

    <RecipientsRegexError> 
     <recipient>[email protected]</recipient> 
    </RecipientsRegexError> 

    <RecipientsBlocked> 
     <recipient>[email protected]</recipient> 
    </RecipientsBlocked> 
</Recipients> 

我有这样的PHP代码来实现这一点($收件人包含db表的关联数组):

<Recipients> 

<RecipientsSent> 
<?php 
foreach ($recipients as $recipient): 
    if ($recipient['status'] == 'S'): 
     echo "<recipient>" . $recipient['email'] . "</recipient>"; 
    endif; 
endforeach; 
?> 
</RecipientsSent> 

<RecipientsRegexError> 
<?php 
foreach ($recipients as $recipient): 
    if ($recipient['status'] == 'R'): 
     echo "<recipient>" . $recipient['email'] . "</recipient>"; 
    endif; 
endforeach; 
?> 
</RecipientsRegexError> 
<?php /** same loop for the B status */ ?> 

</Recipients> 

因此,这意味着如果我有1000项表格和4种不同的状态',可以检查,这意味着会有4个循环,每个执行1000次。

这怎么能以更有效的方式完成?我想过从数据库中提取四组不同的数据库,这意味着4个不同的查询,会更有效率吗?我认为可以用一个循环完成,但是我不能提出解决方案。

这只能用一个循环完成吗?

回答

0

有了一个循环,你可以做以下

<?php 

$string1, $string2 = ''; 

foreach ($recipients as $recipient) { 
    $recipient_email = "<recipient>" . $recipient['email'] . "</recipient>"; 

    switch($recipient['status']) { 
    case 'a': 
     $string1 .= $recipient_email; 
     break; 
    case 'b': 
     $string2 .= $recipient_email; 
     break; 
    } 
} 
?> 

<Recipients> 
    <RecipientsSent> 
    <?php echo $string1; ?> 
    </RecipientsSent> 
    <RecipientsRegexError> 
    <?php echo $string2; ?> 
    </RecipientsRegexError> 
</Recipients> 
+0

@pna感谢您的编辑:)当我写这篇文章时,我几乎睡着了。 – 2012-03-25 12:13:12

0

为什么不只是让您的收件人循环一次,并将其分配给4个列表中的一个(每个状态一个)。然后,您只需遍历每个列表即可生成XML。

尽管只有4种状态并没有多大好处。 (虽然,你居然异形你的代码,看看这是否需要优化?)

+1

Downvoter:保健评论? – 2012-03-24 22:51:43