0

私はまだ PHP に慣れていないので、メールを作成するための長いコードの一部として次のコード スニペットを書きました。

これは正常に機能していますが、ファイルごとに手動で記述する必要がないように、これをより「自動化」する方法があるかどうか疑問に思っていました。$varCount はアップロードされたファイルの数を示しており、それらをリンク ($varLink) として追加し、以下のようにカンマで区切って追加したいので、これらすべてのケースを書かないようにする方法があるのではないかと考えました。

私のコード(作業中):

switch($varCount)
{
    case '1':
        $message.="<strong>Attachments:</strong>&nbsp;&nbsp;" . $varLink1 . "<br /><br />";
        break;
    case '2':
        $message.="<strong>Attachments:</strong>&nbsp;&nbsp;" . $varLink1 . " , " . $varLink2 . "<br /><br />";
        break;
    case '3':
        $message.="<strong>Attachments:</strong>&nbsp;&nbsp;" . $varLink1 . " , " . $varLink2 . " , " . $varLink3 . "<br /><br />";
        break;
    default:
        $message.="<strong>Attachments:</strong>&nbsp;&nbsp;No files uploaded<br /><br />";
        break;
}

これについて助けてくれてありがとう。

4

5 に答える 5

2

$varLink は、すべてのリンクの配列にすることができます。例:$varLinkArray

if (!empty($varLinkArray)){
    $message.="<strong>Attachments:</strong>&nbsp;&nbsp;" . implode(", ",$varLinkArray) . "<br /><br />";
}else {
    $message .= "<strong>Attachments:</strong>&nbsp;&nbsp;No files uploaded<br /><br />";
}
于 2013-10-17T17:54:54.927 に答える
1

配列に $varLink1 変数がまだない場合は、動的変数名を使用して名前で参照できます。

    $message .= "<strong>Attachments:</strong>&nbsp;&nbsp;";
    $links = [];
    for ($i = 1; $i <= $varCount; $i++) {
        $links[] = ${"varLink" . $i};
    }
    $message .= (count($links) == 0) ? "No files uploaded" : implode(" , ", $links);
    $message .= "<br /><br />";
于 2013-10-17T18:01:49.037 に答える
1

コードを改善する方法は複数あります。

最初の 1 つは、 switchステートメントを削除し、代わりに if ブロックを使用することです。このような:

$message .= "<strong>Attachments:</strong>&nbsp;&nbsp;";
if ($varCount == 0) {
    $message .= "No files uploaded";
} else {
    $message .= $varLink1;
    if ($varCount >= 2) {
         $message .= ", " . $varLink2;
         if ($varCount >= 3) {
             $message .= ", " . $varLink3;
         }
    }
}
$message .= "<br /><br />";

ご覧のとおり、まだ少し冗長性がありますが、代わりに配列を使用することで簡単に取り除くことができます。$varCount配列を反復するだけで、もう必要ありません。

// $varLinks is your array
$message .= "<strong>Attachments:</strong>&nbsp;&nbsp;";
if (empty($varLinks)) {
    $message .= "No files uploaded";
} else {
    $message .= join(", ", $varLinks);
}
$message .= "<br /><br />";

join()", "は、各要素の間に接着剤 (ここでは ) を追加して配列を変換します。

于 2013-10-17T18:04:50.340 に答える
0

これにより、デフォルトのケースを除いて、質問のコードの結果が生成されます。

$aVlinks = array($varLink1,$varLink2,$varLink3);

$message .="<strong>Attachments:</strong>&nbsp;&nbsp;";

$message .= implode(",",array_slice($aVlinks,0,$varCount));

$message .= "<br><br>";
于 2013-10-17T18:01:11.653 に答える
0

リンクが事前に構築された静的リストでない場合、この種の機能はループで処理するのが最適です。あなたは次のようなことをしたいと思うでしょう:

$message = "start of the string";
foreach ($vars as $var) {
    $message .= "link for this particular $var";
}
$message .= "end of the string";
于 2013-10-17T17:54:40.157 に答える