2012-03-24 26 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> 

が、私はこの($受信者はdbテーブルの連想配列を含んでいる)を実装するために、このPHPコードを持っている:だから

<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つの異なるステータス 'をチェックすると、それぞれが1000回実行する4つのループが存在することを意味します。

これをより効率的にどのように行うことができますか?私はデータベースから4つの異なるセットをフェッチすることを考えました。つまり、4つの異なるクエリが効率的でしょうか?私はそれが1つのループで行うことができると思っていますが、私は解決策を考え出すことができません。

これはどのような方法でも1つのループで行うことができますか?

答えて

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あなたの編集のおかげで:)私はこれを書いたときに私はほとんど眠っていた。 –

0

受信者を一度ループして、それぞれを4つのリストの1つに割り当てるのはなぜですか(ステータスごとに1つ)。次に、XMLを生成するために各リストを繰り返し処理するだけです。

ただし、4つのステータスではあまり効果がありません。 (、あなたが実際にあなたのコードをプロファイリングしているが、これは最適化する必要があるかどうかを確認するには?)あなたが行うことができます一つのループで

+1

Downvoter以下:ケアはコメントしますか? –

関連する問題